如何从 Trait 获取父命名空间

How to get parent namespace from Trait

我创建了一个特征,我希望能够使用该特征获取 class 的命名空间。这可能吗? self::class 给我父的 class 名称,但不是整个命名空间

您可以将 ReflectionClass->getNamespaceName() 与 self::class 的反射一起使用。

MyTrait.php

namespace MyTraitNamespace;

Trait MyTrait{
    public function echoClassNamespace()
    {
        $ref = new \ReflectionClass(self::class);
        echo $ref->getNamespaceName(); //Will echo MyClassNamespace
    }

    public function echoTraitNamespace()
    {
        echo __NAMESPACE__; //Will echo MyTraitNamespace
    }
}

MyClass.php

namespace MyClassNamespace;

use MyTraitNamespace\MyTrait;

class MyClass{
    use MyTrait;
}