双冒号(::)是Scope Resolution Operator
这用于访问受保护的方法和属性(以及常量)。
但是,我已经看到使用::class返回类的字符串表示。像这样:

namespace App;
class MyClass
{

}

var_dump(MyClass::class); # string(11) "App\MyClass"

我到处寻找有关这种行为的文件。
上面的代码是否也使用了scope resolution操作符,或者这完全不同?如果是,它叫什么名字?
如果它使用sro,这是否意味着php在幕后放置了一个静态属性“类”?(但我无法重写此静态属性)

最佳答案

这是php5.5中的一个新功能,请参见:http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class.class
基本上是为了得到全名。它也不是一个静态变量(见前面的$)而是一个使用class关键字的语言特性。根据php.net上的说明:
使用::class的类名解析是一个编译时转换。这意味着在创建类名字符串时,尚未发生自动加载。因此,即使类不存在,也会扩展类名。在这种情况下不会出现错误。

关于php - MyClass::class-获取MyClass的字符串表示形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35378270/

10-15 12:28