PHP __NAMESPACE__ 特质

PHP __NAMESPACE__ in trait

由于特征实际上是 copy/paste 我期待的代码:

__NAMESPACE__

提供 class 使用它的命名空间。

不幸的是,对我来说,它似乎提供了特征的命名空间。

这是为什么?

您是从特征本身内部方法的上下文中调用它,因此它 return 特征的命名空间是完全合乎逻辑的。

如果您实际上是在询问如何获取 class 的命名空间,请查看 here.

__NAMESPACE__ 包含出现 __NAMESPACE__ 的代码所在的命名空间。就此处适用的概念而言,它有 "literal scope"。您在其他名称空间中调用的函数或您在其他名称空间中实例化的对象也是如此;它们都引用自己的原始命名空间,而不是代码当前 运行 中的命名空间。

命名空间实际上只是影响名称,标识符。对于所有意图和目的,这:

namespace Foo\Bar;

class Baz {}

只是 shorthand 用于:

class Foo\Bar\Baz {}

就所有意图和目的而言,它等同于:

class Foo_Bar_Baz {}

命名空间不会在运行时解析或对运行时有任何实际影响,它们仅用于为名称添加前缀,同时仍允许使用较短的语法,而不必经常编写很长的名称。

__NAMESPACE__指的是当前实体的"name prefix",如上面的Foo_Bar;仅此而已。