让我们说我有一个像这样的简单类使用特征。
<?php namespace A\B;
use C\FooTrait;
class D {
use FooTrait;
}
我的特质看起来像这样。
<?php namespace C;
class FooTrait {
public function getBaseNamespace()
{
// code
}
}
我的预期行为如下:
<?php
$d = new D;
// Shoud be 'A\B';
$d->getBaseNamespace();
但到目前为止,我还没有能够使用反射API来做到这一点。有线索吗?
答案 0 :(得分:1)
这可能比使用反射更简单 如果你试图从特质方法中确定它。
您可以使用:
public function getBaseNamespace()
{
return preg_replace('/(.+)\\\\[^\\\\]+/', '$1', __CLASS__);
}
答案 1 :(得分:0)
我的最终实施如下。
<?php namespace Tools\Namespaces;
use ReflectionClass;
trait NamespaceTrait {
public function getBaseNamespace()
{
$reflection = new ReflectionClass(__CLASS__);
return $reflection->getNamespaceName().'\\';
}
}