双冒号(::)是Scope Resolution Operator。
这用于访问受保护的方法和属性(和常量)。
但是,我已经看到使用:: class来返回类的字符串表示形式。像这样:
namespace App;
class MyClass
{
}
var_dump(MyClass::class); # string(11) "App\MyClass"
我已经广泛搜索了有关此行为的文档。
以上代码是否也使用了Scope Resolution Operator或者这是完全不同的东西?如果是这样,它的名字是什么?
如果它正在使用SRO,那是否意味着PHP在幕后放置了一个静态属性“class”? (虽然我无法覆盖这个静态属性)
答案 0 :(得分:3)
这是PHP5.5中的一项新功能,请参阅:http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class.class
这基本上是为了获得完整的班级名称。它也不是静态变量(请参阅前面的$),而是使用class关键字的语言功能。根据php.net上的说明:
使用:: class的类名解析是编译时转换。这意味着在创建类名字符串时,尚未发生自动加载。因此,即使该类不存在,类名也会扩展。在这种情况下不会发出错误。
答案 1 :(得分:0)
operator :: class引入了PHP 5.5并返回一个带有完全限定类名的字符串。