【问题标题】:PHP __NAMESPACE__ in trait特征中的 PHP __NAMESPACE__
【发布时间】:2016-09-28 08:52:46
【问题描述】:

由于特征实际上是我所期望的复制/粘贴代码:

__NAMESPACE__

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

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

这是为什么?

【问题讨论】:

  • “由于特征实际上是复制/粘贴代码...”不,它们不是。
  • @KaloyanDoichinov 谢谢,这似乎是一种不完全准确的概念化方法!

标签: php traits


【解决方案1】:

__NAMESPACE__ 包含编写__NAMESPACE__ 出现的代码的名称空间。它具有“字面范围”,只要该概念适用于此。在其他命名空间中调用的函数或在其他命名空间中实例化的对象也是如此;它们都引用了自己的原始命名空间,而不是当前运行代码的命名空间。

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

namespace Foo\Bar;

class Baz {}

只是以下的简写:

class Foo\Bar\Baz {}

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

class Foo_Bar_Baz {}

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

__NAMESPACE__指的是当前实体的“名称前缀”,如上面的Foo_Bar;不多也不少。

【讨论】:

  • 好的,很酷,这确实有道理。因此,在这方面,特征并不完全是复制/粘贴代码。
  • 只是扩展一个类或包含一个 .php 文件。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-08-20
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2015-04-03
    相关资源
    最近更新 更多