理解new self 和new static 之間的區別
在PHP 中,self 和static 通常在類別方法中用於實例化新對象,尤其是在繼承方面。不過,這兩個關鍵字之間存在著細微的差別。
new self 與 new static
對PHP 5.2 的影響
將PHP 5.3 函式庫轉換為PHP 5.2(缺乏對後期靜態綁定的支援)時,取代new static( $options) 與new self($options) 可能不會產生預期結果。這是因為 self 將始終引用實際寫入 new 的類,而 static 在目標類解析中提供了靈活性。
範例:
考慮以下程式碼PHP 5.2:
class A { public static function create() { return new self(); } } class B extends A {} $object = B::create(); // $object is of class A, not B
在PHP 5.3 中,相同的程式碼會化類別B 的物件實例化類別B 的物件,因為static將解析為呼叫類別。
目前建議
由於不再積極支援 PHP 5.2,因此找到解決此問題的方法是不可行的。出於相容性原因,建議完全避免使用後期靜態綁定。
以上是PHP `self` 與 `static`:`new static()` 何時與 `new self()` 不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!