文件说
namespace关键字可用于从当前命名空间或子命名空间显式请求元素。它是类的self运算符的命名空间等价物。
我需要等效的静态代替,即。如果一个类扩展了我的类,它的命名空间。
这个
return preg_replace('/.[^\\\\]+$/', '', get_class($object));
做到了,但这让我很难过。
文件说
namespace关键字可用于从当前命名空间或子命名空间显式请求元素。它是类的self运算符的命名空间等价物。
我需要等效的静态代替,即。如果一个类扩展了我的类,它的命名空间。
这个
return preg_replace('/.[^\\\\]+$/', '', get_class($object));
做到了,但这让我很难过。
反射通过 提供了一种有效的方法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();
}
我不认为有一个“后期静态命名空间”助手,你确实需要破解。
例如
<?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";