首頁 >後端開發 >php教程 >為什麼在 PHP 5.2 中取消了抽象靜態類別方法?

為什麼在 PHP 5.2 中取消了抽象靜態類別方法?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-12 04:26:01354瀏覽

Why Were Abstract Static Class Methods Abolished in PHP 5.2 ?

PHP 在5.2 廢除抽象靜態類別方法

在PHP 5.2 及更高版本中,禁止在類別中使用抽象靜態方法。這個決定源於疏忽、設計缺陷和對 self 關鍵字的誤解。

有問題的上下文

最初,PHP 5.0x 和 5.1x 錯誤地允許在類別中宣告抽象靜態函數。然而,由於缺乏後期靜態綁定,這變得毫無用處。因此,類似下面的程式碼將會失敗:

abstract class ParentClass {
    static function foo() {
        self::bar();
    }

    abstract static function bar();
}

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

ChildClass::foo();

在此範例中,foo() 中的self::bar() 呼叫引用了ParentClass 中的bar() 方法,即使foo( )作為ChildClass 的方法被呼叫。因此,程式碼會產生致命錯誤,表示無法呼叫抽象方法 ParentClass::bar()。

警告的理由

鑑於此限制,PHP 5.2 正確地發出警告,勸阻使用抽象靜態方法。由於它們沒有實際用途,任何使用都可能是由於誤解而被認為是糟糕的程式碼。

誤解已解決

PHP 5.3 引入了最新的靜態綁定,允許父類別中的方法存取子類別中的靜態方法。有了這個補充,禁止抽象靜態方法的理由就變得不那麼令人信服了。然而,由於暴露損壞的靜態方法可能會出現問題,警告仍然存在。

錯誤及其解決方案

不幸的是,Rasmus Lerdorf 的誤解, PHP 的創建者錯誤地關閉了一份主張刪除警告的錯誤報告。隨後,儘管缺乏充分的理由,該警告仍然存在。

抽象靜態方法的未來

幸運的是,PHP 7 終於刪除了該警告,因為RFC 中提議:重新分類 E_STRICT 通知。隨著其廢除,開發人員可以再次使用抽象靜態方法,而不會遇到虛假警告。

以上是為什麼在 PHP 5.2 中取消了抽象靜態類別方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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