5

次のようなタイプヒント入力パラメーターを持つメソッドをオーバーライドする場合があります。

class FooParent
{
    public function bar(BazInterface $baz)
    {
        // ...
    }
}

また、入力パラメーターとしてnull値を渡すことを許可する必要があります。

インターフェイスタイプのヒントを削除した場合

class Foo extends FooParent
{
    public function bar($baz)
    {
        // ...
    }
}

次のようなエラーが発生します。

Fatal error: Declaration of Foo::bar() must be compatible with that of FooParent::bar()

親クラスを変更せずにnull値を許可するにはどうすればよいですか?

親クラスはサードパーティのライブラリまたはフレームワークの一部である可能性があるため、これは実際の例です。したがって、それを変更することはできません。

4

1 に答える 1

8

解決策は、次のように入力パラメータにデフォルトのnull値を追加することです。

class Foo extends FooParent
{
    public function bar(BazInterface $baz = null)
    {
        // ...
    }
}

デフォルト値が提供されていない場合、デフォルト値が変数にデフォルト値を割り当てるので、これは私が期待したものではありません。許可された入力に影響を与えるとは思っていませんでした。しかし、 http://php.net/manual/en/language.oop5.typehinting.phpで例を見たので、ここで文書化することにしました。誰かがそれが役に立つと思うことを願っています。

于 2012-07-28T20:59:30.450 に答える