「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP でのメソッド パラメータのオーバーライドが厳格な標準に違反するのはなぜですか?

PHP でのメソッド パラメータのオーバーライドが厳格な標準に違反するのはなぜですか?

2024 年 11 月 6 日に公開
ブラウズ:545

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() メソッドをオーバーライドします。コンパイラは、新しいシグネチャが元のシグネチャと互換性があるかどうかを判断できず、将来的に問題が発生する可能性があります。

メソッド パラメータをオーバーライドする代替方法

別のメソッドをオーバーライドする代わりに、シグネチャを使用している場合、目的の機能を実現する別のアプローチがあります:

  • 関数のオーバーロード:同じ名前で異なるシグネチャを持つ別の関数を定義します。これにより、同じ関数を複数の定義でオーバーロードできます。
  • 継承: 親クラスを拡張し、特定のシグネチャを持つメソッドを追加する新しい子クラスを作成します。
  • Composition: メソッドを変更せずにさまざまなクラスの機能を組み合わせるには、継承の代わりに合成を使用します。

次のようにします。これらの代替案を使用すると、PHP アプリケーションで必要な機能を実現しながら、厳格な標準への違反を回避できます。

リリースステートメント この記事は次の場所に転載されています: 1729202656 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3