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

PHP new static 和 new self詳解

高洛峰
高洛峰原創
2017-02-21 15:29:431203瀏覽

使用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 static 和 new self详解

更多PHP new static 和 new self詳解相關文章請關注PHP中文網!

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