我有一些代码,如下所示:
namespace {
trait ns{
public function get_ns(){
var_dump(__NAMESPACE__);
}
}
}
namespace a{
class obj{
use \ns;
}
}
namespace b{
class obj{
use \ns;
}
}
namespace {
$a = new a\obj;
$b = new b\obj;
$a->get_ns();
$b->get_ns();
}
$a-> get_ns();和$b-> get_ns(); dump string(0)“”而不是string(1)“a”和string(1)“b”.如果我使用抽象类而不是特征,行为是相同的.
这显然是因为trait / abstract类是在正式命名空间中声明的,但是我想让trait / abstract类转储实际对象的命名空间(a和b).
有没有办法在没有在每个对象中创建此函数并且不将__NAMESPACE__作为参数传递给get_ns()的情况下执行此操作?
解决方法:
var_dump((new \ReflectionObject($this))->getNamespaceName());
这就是它所做的事情.