由于特征是有效的复制/粘贴代码,我期待:
__NAMESPACE__
使用它提供类的命名空间。
不幸的是,对我来说,它似乎提供了特征的命名空间。
为什么会这样?
答案 0 :(得分:2)
__NAMESPACE__
包含写入__NAMESPACE__
的代码所在的命名空间。它有“文字范围”,只要这个概念适用于此。您在其他名称空间中调用的函数或您在其他名称空间中实例化的对象也是如此;它们都引用自己的原始命名空间,而不是代码当前运行的命名空间。
命名空间实际上只影响名称,标识符。对于所有意图和目的:
namespace Foo\Bar;
class Baz {}
只是简写:
class Foo\Bar\Baz {}
所有意图和目的相当于:
class Foo_Bar_Baz {}
命名空间在运行时没有得到解析,或者对运行时没有任何实际影响,它们只是用于为名称添加前缀,同时仍然允许有些短的语法,而不必经常编写很长的名称。
__NAMESPACE__
是指当前实体的“名称前缀”,如上面的Foo_Bar
;仅此而已。
答案 1 :(得分:1)
您从特征本身内部的方法的上下文中调用它,因此返回特征的命名空间是完全合乎逻辑的。
如果您实际上在询问如何获取该类的命名空间,请查看here。