1

文件说

namespace关键字可用于从当前命名空间或子命名空间显式请求元素。它是类的self运算符的命名空间等价物。

我需要等效的静态代替,即。如果一个类扩展了我的类,它的命名空间。

这个

 return preg_replace('/.[^\\\\]+$/', '', get_class($object));

做到了,但这让我很难过。

4

2 回答 2

3

反射通过 提供了一种有效的方法ReflectionObject->getNamespace(),请检查以下代码:

namespace Foo {
    class Bar {
        public function getNamespace() {
            return (new \ReflectionObject($this))->getNamespaceName();
        }
    }
}

namespace Baz {
    use Foo\Bar as BaseClass;

    class Bar extends BaseClass {}
}

namespace {
    $bar1 = new Foo\Bar();
    echo "ns1 is: ", $bar1->getNamespace(), '<br>';

    $bar2 = new Baz\Bar();
    echo "ns2 is: ", $bar2->getNamespace();
}
于 2014-12-30T07:20:50.310 回答
0

我不认为有一个“后期静态命名空间”助手,你确实需要破解。

例如

<?php

namespace ProjectFoo;

class Foo {
    public static function ns() { echo __NAMESPACE__; }
    public static function getNamespace() {
        return static::ns();
    }
}

namespace ProjectBar;
use ProjectFoo\Foo;

class Bar extends Foo {
    public static function ns() { echo __NAMESPACE__; }
}

$foo = new Foo();
$foo::getNamespace();
print "\n";

$bar = new Bar();
$bar::getNamespace();
print "\n";
于 2013-08-07T04:04:26.100 回答