在PHP中有两个命名空间操作符:
\
和::
::
用于内部命名空间,例如:
namespace example;
class Foo {
public static $bar = 'hello';
}
我可以通过$bar
Foo
和Foo::$bar
课程的其他成员
完整的命名空间名称Foo
不是example::Foo
,而是example\Foo
,完整的命名空间名称$ bar将是example\Foo::$bar
使用这两个运算符的原因或理由是什么,而不是坚持已经存在的一个一致运算符?
答案 0 :(得分:4)
::
是Scope Resolution Operator,仅用于访问静态类。它与命名空间无关。此外,在PHP 5.3中添加了namespacing,这在静态类之后很久。
我猜这就是为什么他们使用两个不同的运营商(两个不同的目标)
答案 1 :(得分:4)
你应该看看the namespace separator RFC,它会调用支持和反对反斜杠的实际参数。
未选择::
的主要原因是由于在进行范围解析时可能导致的模糊性。鉴于名称空间可以别名(use \Foo\Bar as Baz;
),可能会导致各种各样的搞笑hijink。