使用self:: 或__CLASS__ 對目前類別的靜態引用,取決於定義目前方法所在的類別:使用static:: 不再被解析為定義目前方法所在的類,而是在實際執行時計算的。也可以稱之為“靜態綁定”,因為它可以用於(但不限於)靜態方法的呼叫。
最近在一個影片的評論被問到一個小問題:這裡選擇用static 而不是self有特殊的考慮麼?或者我們可以這樣轉換一下問題:
PHP 的new static 和new self 具體有什麼?
其實這個來看一個例子應該就很清晰了:
#class Father { public static function getSelf() { return new self(); } public static function getStatic() { return new static(); } } class Son extends Father {} echo get_class(Son::getSelf()); // Father echo get_class(Son::getStatic()); // Son echo get_class(Father::getSelf()); // Father echo get_class(Father::getStatic()); // Father
這裡面注意這一行get_class(Son::getStatic());
回傳的是Son
這個class,可以總結如下:
new self
1.self
傳回的是new self
中關鍵字new
所在的類別中,例如這裡範例的:
public static function getSelf() { return new self(); // new 关键字在 Father 这里 }
總是回傳Father
。
new static
2.static
則上面的基礎上,更聰明一點點:static
會回傳執行new static( )
的類,例如Son
執行get_class(Son::getStatic())
傳回的是Son
, Father
執行get_class(Father::getStatic())
傳回的是Father
#而在沒有繼承的情況下,可以認為new self
和new static
是傳回相同的結果。
Tips: 可以用一個好的 IDE 來直接看註解。例如 PhpStorm:
以上就是本文的全部內容,希望對大家的學習有幫助。
相關推薦:
PHP中new self()與new static()的差異分析
#
以上是關於PHP new static 和 new self詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!