3 php oop abstract-class namespaces traits
我有一些代码,如下所示:
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();
}
Run Code Online (Sandbox Code Playgroud)
这两个$a->get_ns();和$b->get_ns();倾倒string(0) "",而不是string(1) "a"和string(1) "b".如果我使用抽象类而不是特征,行为是相同的.
这显然是因为trait/abstract类是在正式命名空间中声明的,但是我想让trait/abstract类转储实际对象的命名空间(a和b).
如果没有在每个对象中创建此函数并且不__NAMESPACE__作为参数传递,有没有办法做到这一点get_ns()?
使用反射api:
var_dump((new \ReflectionObject($this))->getNamespaceName());
Run Code Online (Sandbox Code Playgroud)
这就是它所做的事情.