2

在 PHP 中有两个命名空间运算符:

\::

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

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

我可以通过以下方式访问和其他班级$bar成员:FooFoo::$bar

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

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

4

2 回答 2

4

范围解析运算符::,仅用于访问静态类。它与命名空间无关。在 PHP 5.3 中也添加了命名空间,在静态类之后很久。

我想这就是为什么他们使用两个不同的运算符(用于两个不同的目标)

于 2013-01-07T10:38:10.743 回答
4

您应该看一下命名空间分隔符 RFC,它调用了支持和反对反斜杠的实际参数。

没有被选中的主要原因::是它在进行范围解析时可能会引起歧义。鉴于命名空间可以使用别名 ( use \Foo\Bar as Baz;),可能会导致各种搞笑的 hijinks。

于 2013-01-07T10:47:42.547 回答