ホームページ >バックエンド開発 >PHPチュートリアル >オブジェクトの配列の型ヒントを処理するにはどうすればよいですか?

オブジェクトの配列の型ヒントを処理するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-18 07:02:03927ブラウズ

How to Handle Type Hinting for Arrays of Objects?

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

クラスや関数を操作する場合、型ヒントを使用して、予期される引数の型を指定できます。ただし、オブジェクトの配列を関数に渡そうとすると、エラーが発生する可能性があります。この記事では、このような状況に対処する方法について説明します。

この問題を理解するには、次のクラスと関数を考慮してください。

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

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

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

Catchable fatal error: Argument 1 passed to getFoo()
must be an instance of Foo, array given

この問題を解決するには、Foo オブジェクトの配列を表すカスタム タイプを作成できます。 1 つの方法は、ArrayObject を拡張し、offsetSet メソッドを実装して、配列に追加された値が Foo のインスタンスであることを検証するクラスを作成することです。

<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>

カスタム ArrayOfFoo 型を使用すると、次のことを保証できます。は Foo オブジェクトの配列を操作し、関数は ArrayOfFoo 引数を受け取ることができます。

もう 1 つのオプションは、Haldayne のようなライブラリを使用して、メンバーシップ要件チェックのボイラープレートを処理することです。

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

以上がオブジェクトの配列の型ヒントを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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