」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼在 PHP 中重寫方法參數違反了嚴格的標準?

為什麼在 PHP 中重寫方法參數違反了嚴格的標準?

發佈於2024-11-06
瀏覽:976

Why Does Overriding Method Parameters in PHP Violate Strict Standards?

在PHP 中重寫方法參數:違反嚴格標準

在物件導向程式設計中,里氏替換原則(LSP) 規定:子類型的物件可以替換其父對象,而不改變程式的行為。然而,在 PHP 中,用不同的參數簽名覆蓋方法被認為是違反嚴格標準的。

為什麼這是違規?

PHP 是弱型別語言,這表示編譯器無法在編譯時確定變數的確切型別。這表示當子類別重寫父類別方法時,編譯器無法驗證新簽章是否與原始簽章相容。

因此,編譯器會發出嚴格的標準警告,標記一個潛在問題:可能會導致程式中斷。

考慮以下範例:

class Foo
{
    public function bar(array $bar) {}
}

class Baz extends Foo
{
    public function bar($bar) {}
}

在此程式碼中,Baz::bar() 方法使用不同的簽章來重寫 Foo::bar() 方法。編譯器無法確定新簽章是否與原始簽章相容,可能會導致問題。

重寫方法參數的替代方法

而不是用不同的方法重寫方法簽名,還有其他方法可以實現所需的功能:

  • 函數重載: 定義具有相同名稱但不同簽章的單獨函數。這允許您使用多個定義重載相同函數。
  • 繼承:創建一個新的子類,該子類擴展父類並添加具有特定簽名的其他方法。
  • 組合:使用組合而非繼承來組合不同類別的功能,而無需修改其方法。

透過遵循這些替代方案,您可以避免違反嚴格標準,同時仍實現PHP 應用程式中所需的功能。

版本聲明 本文轉載於:1729202656如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3