首頁 >後端開發 >php教程 >為什麼 PHP 不允許在嚴格模式下使用抽象靜態類別方法?

為什麼 PHP 不允許在嚴格模式下使用抽象靜態類別方法?

Linda Hamilton
Linda Hamilton原創
2024-11-19 19:30:03648瀏覽

Why Did PHP Disallow Abstract Static Class Methods in Strict Mode?

為什麼PHP 的嚴格模式不允許抽象靜態類別方法

在PHP 5.2 中,啟用嚴格警告將觸發抽象類別方法的警告警告。實作此限制是由於 PHP 5.0.x 和 5.1.x 錯誤地允許此類方法,並打算在以後的版本中禁止它們。

PHP 5.2 中抽象靜態方法的問題

這個問題是由後期靜態綁定的行為引起的,直到 PHP 5.3 才引入。在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() 將明確引用ParentClass 中的bar() 方法,即使foo( ) 作為ChildClass 的方法被呼叫。這使得 PHP 5.2 中的抽象靜態方法毫無用處,因為抽象方法的全部意義在於允許子類別中的不同實作。

PHP 5.3 後缺乏合理性

隨著 PHP 5.3 中後期靜態綁定的引入,反對抽象靜態方法的主要爭論被消除了。現在可以使用 Static::bar() 來取代上面範例中的 self::bar(),允許父類別中定義的方法呼叫子類別中的靜態方法。

警告

儘管引入了最新的靜態綁定,但抽象靜態方法的警告仍然保留在 PHP 中。由於 PHP 創辦人 Rasmus Lerdorf 的誤解,要求刪除的 PHP 錯誤報告 53081 被錯誤地關閉為「虛假」。

PHP 7 中的解決方案

最後,在 PHP 7 中,該警告被刪除。 PHP RFC:重新分類 E_STRICT 通知將其重新分類為通知,不再在嚴格模式下引發錯誤。此變更認可了抽象靜態方法的有用性和有效性。

以上是為什麼 PHP 不允許在嚴格模式下使用抽象靜態類別方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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