文档说
namespace 关键字可用于显式请求当前命名空间或子命名空间中的元素。它是类的 self 运算符的命名空间。
我需要相当于 静态 ,即。如果一个类扩展了我的类,那就是它的命名空间。
此
return preg_replace('/.[^\\\\]+$/', '', get_class($object));
这样做但是让我难过。
答案 0 :(得分:2)
Reflection通过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();
}
答案 1 :(得分:0)
我认为没有“迟到的静态命名空间”帮助器,你确实需要破解。
e.g。
<?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";