首頁 > 後端開發 > php教程 > PHP `self` 與 `static`:`new static()` 何時與 `new self()` 不同?

PHP `self` 與 `static`:`new static()` 何時與 `new self()` 不同?

Susan Sarandon
發布: 2024-12-14 00:15:09
原創
522 人瀏覽過

PHP `self` vs. `static`: When Does `new static()` Differ from `new self()`?

理解new self 和new static 之間的區別

在PHP 中,self 和static 通常在類別方法中用於實例化新對象,尤其是在繼承方面。不過,這兩個關鍵字之間存在著細微的差別。

new self 與 new static

  • self 指的是定義 new 關鍵字的類,考慮到當前作用域和繼承層次結構。
  • static,在 PHP 5.3 中引入,指的是呼叫 new 方法的類,無論其繼承層次結構如何。

對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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板