首頁 > 後端開發 > php教程 > 為什麼 PHP 5.2 不允許抽象靜態類別方法?

為什麼 PHP 5.2 不允許抽象靜態類別方法?

DDD
發布: 2024-11-11 03:44:02
原創
1066 人瀏覽過

Why Did PHP 5.2 Disallow Abstract Static Class Methods?

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

在 PHP 5.2 中,啟用嚴格警告可能會觸發熟悉的警告:「靜態函數不應該是抽象的」。此警告源自於 PHP 5.2 中引入的一項更改,該更改不允許抽象靜態類別方法。

原因:歷史監督

PHP 5.2 最初缺乏後期靜態綁定,使抽象靜態函數變得無用。由於抽象靜態方法中的 self 關鍵字引用的是父類,而不是呼叫該方法的子類,因此此類方法沒有實際意義。因此,該警告旨在捕獲並防止潛在的編碼錯誤。

晚期靜態綁定和有缺陷的理由

在PHP 5.3 中,引入了晚期靜態綁定,允許使用static 關鍵字從父方法調用子類的靜態方法。這消除了使抽象靜態方法無用的技術障礙。然而,基於一個薄弱的論點,該警告在 PHP 5.2 中持續存在:暴露抽象靜態方法可能會導致公共方法損壞。

錯誤的看法

The justification for這個警告是有缺陷的。抽象靜態方法可以與後期靜態綁定共存,為從父方法呼叫子類別的靜態方法提供了有效的用例。

混亂和不準確的回應

A PHP 錯誤報告請求刪除由於添加後期靜態綁定而產生的警告,但收到了Rasmus Lerdorf 的不屑一顧的回應。他錯誤地指出具有後期靜態綁定的抽象靜態方法是有效的,這是不正確的,因為它們仍然觸發警告。這種混亂和缺乏清晰度導致警告持續存在。

PHP 7 中的解決方案

幸運的是,PHP 7 終於糾正了這個問題,重新分類了這個警告僅僅是一個通知。隨著 PHP 7 的引入,完全支援抽象靜態方法,可以安全使用而不會觸發任何警告。

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

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