【发布时间】:2015-01-28 00:46:10
【问题描述】:
我有一些代码如下:
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"。如果我使用抽象类而不是特征,则行为是相同的。
这是(显然)因为 trait/abstract 类是在正常命名空间中声明的,但是我希望 trait/abstract 类转储实际对象(a 和 b)的命名空间。
有什么方法可以做到这一点,而不在每个对象中创建这个函数并且不将__NAMESPACE__ 作为参数传递给get_ns()?
【问题讨论】:
标签: php oop namespaces abstract-class traits