首頁  >  文章  >  後端開發  >  為什麼 PHP 5.2 中不允許使用靜態抽象方法以及後續版本中發生了什麼變化?

為什麼 PHP 5.2 中不允許使用靜態抽象方法以及後續版本中發生了什麼變化?

Susan Sarandon
Susan Sarandon原創
2024-11-14 12:57:02937瀏覽

Why Were Static Abstract Methods Disallowed in PHP 5.2 and What Changed in Later Versions?

為什麼PHP 5.2 中不允許使用靜態抽象方法

在PHP 5.2 中,嚴格警告的引入導致了一系列相關標準警告抽象靜態類別方法。這項變化引發了一個問題:為什麼 PHP 不允許抽象靜態函數?

禁止背後的原因

最初,PHP 5.2 中禁止抽象靜態方法是由於缺乏後期靜態綁定。當時,像下面這樣的程式碼不會如預期運作:

abstract class ParentClass {
    static function foo() {
        echo "I'm gonna do bar()";
        self::bar();
    }

    abstract static function bar();
}

class ChildClass extends ParentClass {
    static function bar() {
        echo "Hello, World!";
    }
}

ChildClass::foo();

即使作為子類別的方法調用, self::bar() 呼叫也會引用 bar() 方法的父類別。如果沒有後期靜態綁定,此限制使得抽象靜態方法本質上毫無用處。

後期靜態綁定的新增

隨著 PHP 5.3 的引入,static 關鍵字允許方法在父類別中呼叫子類別中的靜態方法。這為合理使用抽象靜態方法打開了大門。後期靜態綁定解決了先前的限制,並使靜態抽象方法變得可行。

有缺陷的基本原理

儘管引入了後期靜態綁定,但針對抽象靜態函數的警告仍然存在。提出的論點是呼叫 ParentClass::foo() 可能會暴露損壞的 ParentClass::bar() 方法。然而,這個問題可以透過確保抽象類別沒有被實例化來解決。

錯誤的決定

儘管理由有缺陷,警告仍然存在於 PHP 中。一份要求刪除該漏洞的 PHP 錯誤報告被錯誤地關閉為「虛假」。這個錯誤的決定保留了警告,這讓開發人員非常沮喪。

靜態抽象方法的未來

幸運的是,警告被設定為被刪除PHP 7 中的這項變更將使PHP 與現代物件導向的程式設計實踐保持一致,並允許開發人員利用抽象靜態方法,而不會出現不必要的警告。開發人員將不再需要應對 PHP 5.2 中錯誤決策造成的混亂。

以上是為什麼 PHP 5.2 中不允許使用靜態抽象方法以及後續版本中發生了什麼變化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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