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 的引入,完全支援抽象靜態方法,並且可以安全使用而不會觸發任何警告。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3