型ヒント: オブジェクトの配列
オブジェクトの配列を引数として関数に渡すとき、次の場合にエラーが発生することがあります。引数の型が指定されていません。たとえば、次のコードを考えてみましょう:
class Foo {}
function getFoo(Foo $f) {}
Foo オブジェクトの配列を getFoo に渡そうとすると、致命的なエラーが発生します:
Argument 1 passed to getFoo() must be an instance of Foo, array given
この問題を解決するには、カスタム クラスを使用して、引数の型を目的のオブジェクト型の配列として指定できます。たとえば、ArrayOfFoo クラスは次のように定義できます。
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');
}
}
このクラスは、Foo オブジェクトのみがその要素に割り当てられることを保証します。 getFoo 関数は、ArrayOfFoo 引数を受け入れるように更新できます。
function getFoo(ArrayOfFoo $foos) {
foreach ($foos as $foo) {
// ...
}
}
これで、Foo オブジェクトの配列を getFoo に渡すと、期待通りに動作します。
あるいは、Haldayne ライブラリを使用してプロセスを簡素化することもできます。
class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects {
protected function allowed($value) { return $value instanceof Foo; }
}
このクラスは、配列内で Foo オブジェクトのみが許可されていることを確認するための組み込みチェックを提供します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3