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