Typhinweis: Array von Objekten
Bei der Übergabe 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:
class Foo {}
function getFoo(Foo $f) {}
Der Versuch, ein Array von Foo-Objekten an getFoo zu übergeben, führt zu einem schwerwiegenden Fehler:
Argument 1 passed to getFoo() must be an instance of Foo, array given
Um dieses Problem zu lösen, können Sie den Argumenttyp mithilfe einer benutzerdefinierten Klasse als Array des gewünschten Objekttyps angeben. Beispielsweise kann eine ArrayOfFoo-Klasse wie folgt definiert werden:
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');
}
}
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:
function getFoo(ArrayOfFoo $foos) {
foreach ($foos as $foo) {
// ...
}
}
Jetzt funktioniert die Übergabe eines Arrays von Foo-Objekten an getFoo wie erwartet.
Alternativ kann die Haldayne-Bibliothek verwendet werden, um den Prozess zu vereinfachen:
class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects {
protected function allowed($value) { return $value instanceof Foo; }
}
Diese Klasse bietet integrierte Prüfungen, um sicherzustellen, dass nur Foo-Objekte im Array zulässig sind.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3