2016-02-13 39 views
4

双冒号(::)是Scope Resolution OperatorMyClass :: class - 获取MyClass的字符串表示形式

这是用来访问受保护的方法和属性(和常量)。

但是,我看到使用::类返回类的字符串表示。像这样:

namespace App; 
class MyClass 
{ 

} 

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

我已经搜遍这个行为的文档。

上述代码是否也使用范围分辨率运算符还是完全不同的?如果是这样,它的名字是什么?

如果使用的是SRO,是否意味着PHP在后台放置了一个静态属性“class”? (我一直无法覆盖虽然这静态属性)

回答

3

这是在PHP5.5中的新功能,请参阅:http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class.class

它基本上是用于获取类的全名。它也不是一个静态变量(请参阅前面的$),而是使用class关键字的语言功能。根据php.net上的说明:

使用:: class的类名称解析是编译时转换。这意味着在创建类名称字符串时不会自动加载。因此,即使类不存在,类名也会被扩展。在这种情况下不会发生错误。

0

operator :: class与PHP 5.5一起引入,并返回一个带有完全限定类名的字符串。

相关问题