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

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

Nov 19, 2024 pm 07:30 PM

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

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

11個最佳PHP URL縮短腳本(免費和高級) 11個最佳PHP URL縮短腳本(免費和高級) Mar 03, 2025 am 10:49 AM

11個最佳PHP URL縮短腳本(免費和高級)

在Laravel中使用Flash會話數據 在Laravel中使用Flash會話數據 Mar 12, 2025 pm 05:08 PM

在Laravel中使用Flash會話數據

Instagram API簡介 Instagram API簡介 Mar 02, 2025 am 09:32 AM

Instagram API簡介

簡化的HTTP響應在Laravel測試中模擬了 簡化的HTTP響應在Laravel測試中模擬了 Mar 12, 2025 pm 05:09 PM

簡化的HTTP響應在Laravel測試中模擬了

php中的捲曲:如何在REST API中使用PHP捲曲擴展 php中的捲曲:如何在REST API中使用PHP捲曲擴展 Mar 14, 2025 am 11:42 AM

php中的捲曲:如何在REST API中使用PHP捲曲擴展

構建具有Laravel後端的React應用程序:第2部分,React 構建具有Laravel後端的React應用程序:第2部分,React Mar 04, 2025 am 09:33 AM

構建具有Laravel後端的React應用程序:第2部分,React

在Codecanyon上的12個最佳PHP聊天腳本 在Codecanyon上的12個最佳PHP聊天腳本 Mar 13, 2025 pm 12:08 PM

在Codecanyon上的12個最佳PHP聊天腳本

Laravel中的通知 Laravel中的通知 Mar 04, 2025 am 09:22 AM

Laravel中的通知

See all articles