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