向PHP添加第二个命名空间运算符的基本原理是什么?

时间:2013-01-07 10:32:16

标签: php namespaces

在PHP中有两个命名空间操作符:

\::

::用于内部命名空间,例如:

namespace example;
class Foo {
    public static $bar = 'hello';
}

我可以通过$bar

访问FooFoo::$bar课程的其他成员

完整的命名空间名称Foo不是example::Foo,而是example\Foo,完整的命名空间名称$ bar将是example\Foo::$bar

使用这两个运算符的原因或理由是什么,而不是坚持已经存在的一个一致运算符?

2 个答案:

答案 0 :(得分:4)

::Scope Resolution Operator,仅用于访问静态类。它与命名空间无关。此外,在PHP 5.3中添加了namespacing,这在静态类之后很久。

我猜这就是为什么他们使用两个不同的运营商(两个不同的目标)

答案 1 :(得分:4)

你应该看看the namespace separator RFC,它会调用支持和反对反斜杠的实际参数。

未选择::的主要原因是由于在进行范围解析时可能导致的模糊性。鉴于名称空间可以别名(use \Foo\Bar as Baz;),可能会导致各种各样的搞笑hijink。