首頁  >  文章  >  後端開發  >  關於PHP new static 和 new self詳解

關於PHP new static 和 new self詳解

墨辰丷
墨辰丷原創
2018-05-25 11:14:441252瀏覽

使用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 selfnew static是傳回相同的結果。

Tips: 可以用一個好的 IDE 來直接看註解。例如 PhpStorm:

以上就是本文的全部內容,希望對大家的學習有幫助。


相關推薦:

PHP中new self()與new static()的差異分析

 php中self與this的使用

#PHP 中this self static 的差異 

#

以上是關於PHP new static 和 new self詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn