2016-02-13 82 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一起引入,並返回一個帶有完全限定類名的字符串。

相關問題