使用抽象 Class 或特征获取对象的命名空间?
Get Namespace of an object using an Abstract Class or Trait?
我有一些代码如下:
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();
都转储 string(0) ""
而不是 string(1) "a"
和 string(1) "b"
。如果我使用抽象 class 而不是特征,则行为是相同的。
这(显然)是因为 trait/abstract class 是在正常命名空间中声明的,但是我希望 trait/abstract class 转储命名空间实际对象(a 和 b)的数量。
有没有办法做到这一点而不在每个对象中创建这个函数并且不将 __NAMESPACE__
作为参数传递给 get_ns()
?
您可以从 $this
:
获取命名空间
$class = get_class($this);
$ns = substr($class, 0, strrpos($class, '\'));
使用 reflection api:
var_dump((new \ReflectionObject($this))->getNamespaceName());
这就是它的用途。
我有一些代码如下:
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();
都转储 string(0) ""
而不是 string(1) "a"
和 string(1) "b"
。如果我使用抽象 class 而不是特征,则行为是相同的。
这(显然)是因为 trait/abstract class 是在正常命名空间中声明的,但是我希望 trait/abstract class 转储命名空间实际对象(a 和 b)的数量。
有没有办法做到这一点而不在每个对象中创建这个函数并且不将 __NAMESPACE__
作为参数传递给 get_ns()
?
您可以从 $this
:
$class = get_class($this);
$ns = substr($class, 0, strrpos($class, '\'));
使用 reflection api:
var_dump((new \ReflectionObject($this))->getNamespaceName());
这就是它的用途。