Wie behebe ich Fehler beim Übergeben eines Arrays von Objekten als Funktionsargumente?

DDD
Freigeben: 2024-10-18 06:53:30
Original
321 Leute haben es durchsucht

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

Typhinweis: Array von Objekten

Beim Übergeben eines Arrays von Objekten als Argument an eine Funktion kann ein Fehler auftreten, wenn die Argumenttyp ist nicht angegeben. Betrachten Sie beispielsweise den folgenden Code:

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

function getFoo(Foo $f) {}</code>
Nach dem Login kopieren

Der Versuch, ein Array von Foo-Objekten an getFoo zu übergeben, führt zu einem schwerwiegenden Fehler:

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

Um dieses Problem zu beheben, können Sie Folgendes tun Geben Sie den Argumenttyp mithilfe einer benutzerdefinierten Klasse als Array des gewünschten Objekttyps an. Beispielsweise kann eine ArrayOfFoo-Klasse wie folgt definiert werden:

<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>
Nach dem Login kopieren

Diese Klasse stellt sicher, dass ihren Elementen nur Foo-Objekte zugewiesen werden können. Die getFoo-Funktion kann dann aktualisiert werden, um ein ArrayOfFoo-Argument zu akzeptieren:

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

Jetzt funktioniert die Übergabe eines Arrays von Foo-Objekten an getFoo wie erwartet.

Alternativ kann die Haldayne-Bibliothek verwendet werden Wird verwendet, um den Prozess zu vereinfachen:

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

Diese Klasse bietet integrierte Prüfungen, um sicherzustellen, dass nur Foo-Objekte im Array zulässig sind.

Das obige ist der detaillierte Inhalt vonWie behebe ich Fehler beim Übergeben eines Arrays von Objekten als Funktionsargumente?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage