ホームページ  >  記事  >  バックエンド開発  >  オブジェクトの配列を関数の引数として渡すときのエラーを解決するにはどうすればよいですか?

オブジェクトの配列を関数の引数として渡すときのエラーを解決するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-18 06:53:30323ブラウズ

How to Resolve Errors When Passing an Array of Objects as Function Arguments?

型ヒント: オブジェクトの配列

オブジェクトの配列を関数の引数として渡すとき、次の場合にエラーが発生することがあります。引数の型が指定されていません。たとえば、次のコードについて考えてみましょう。

<code class="php">class Foo {}

function getFoo(Foo $f) {}</code>

Foo オブジェクトの配列を getFoo に渡そうとすると、致命的なエラーが発生します。

<code class="php">Argument 1 passed to getFoo() must be an instance of Foo, array given</code>

この問題を解決するには、次のようにします。カスタム クラスを使用して、引数の型を目的のオブジェクト型の配列として指定します。たとえば、ArrayOfFoo クラスは次のように定義できます。

<code class="php">class ArrayOfFoo extends \ArrayObject {
    public function offsetSet($key, $val) {
        if ($val instanceof Foo) {
            return parent::offsetSet($key, $val);
        }
        throw new \InvalidArgumentException('Value must be a Foo');
    }
}</code>

このクラスは、Foo オブジェクトのみをその要素に割り当てられるようにします。 getFoo 関数は、ArrayOfFoo 引数を受け入れるように更新できます。

<code class="php">function getFoo(ArrayOfFoo $foos) {
    foreach ($foos as $foo) {
        // ...
    }
}</code>

これで、Foo オブジェクトの配列を getFoo に渡すと、期待どおりに機能するようになります。

あるいは、Haldayne ライブラリを次のようにすることもできます。プロセスを簡素化するために使用されます:

<code class="php">class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects {
    protected function allowed($value) { return $value instanceof Foo; }
}</code>

このクラスは、配列内で Foo オブジェクトのみが許可されていることを確認するための組み込みチェックを提供します。

以上がオブジェクトの配列を関数の引数として渡すときのエラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。