在PHP 中重寫方法參數:違反嚴格標準
在物件導向程式設計中,里氏替換原則(LSP) 規定:子類型的物件可以替換其父對象,而不改變程式的行為。然而,在 PHP 中,用不同的參數簽名覆蓋方法被認為是違反嚴格標準的。
為什麼這是違規?
PHP 是弱型別語言,這表示編譯器無法在編譯時確定變數的確切型別。這表示當子類別重寫父類別方法時,編譯器無法驗證新簽章是否與原始簽章相容。
因此,編譯器會發出嚴格的標準警告,標記一個潛在問題:可能會導致程式中斷。
考慮以下範例:
class Foo
{
public function bar(array $bar) {}
}
class Baz extends Foo
{
public function bar($bar) {}
}
在此程式碼中,Baz::bar() 方法使用不同的簽章來重寫 Foo::bar() 方法。編譯器無法確定新簽章是否與原始簽章相容,可能會導致問題。
重寫方法參數的替代方法
而不是用不同的方法重寫方法簽名,還有其他方法可以實現所需的功能:
透過遵循這些替代方案,您可以避免違反嚴格標準,同時仍實現PHP 應用程式中所需的功能。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3