使用特征检索类的命名空间

时间:2014-10-21 07:56:50

标签: php reflection

让我们说我有一个像这样的简单类使用特征。

<?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来做到这一点。有线索吗?

2 个答案:

答案 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().'\\';
    }
}