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