型ヒント: オブジェクトの配列
オブジェクトの配列を関数の引数として渡すとき、次の場合にエラーが発生することがあります。引数の型が指定されていません。たとえば、次のコードについて考えてみましょう。
<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 サイトの他の関連記事を参照してください。