Typhinweise für Arrays von Objekten
Beim Arbeiten mit Klassen und Funktionen können Typhinweise verwendet werden, um den erwarteten Typ von Argumenten anzugeben. Beim Versuch, ein Array von Objekten an eine Funktion zu übergeben, kann jedoch ein Fehler auftreten. In diesem Artikel wird untersucht, wie mit solchen Situationen umgegangen wird.
Um dieses Problem zu verstehen, betrachten Sie die folgende Klasse und Funktion:
<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 Fehler :
Catchable fatal error: Argument 1 passed to getFoo() must be an instance of Foo, array given
Um dieses Problem zu beheben, kann ein benutzerdefinierter Typ erstellt werden, der ein Array von Foo-Objekten darstellt. Ein Ansatz besteht darin, eine Klasse zu erstellen, die ArrayObject erweitert und eine offsetSet-Methode implementiert, um zu überprüfen, ob alle dem Array hinzugefügten Werte Instanzen von Foo sind.
<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>
Durch die Verwendung des benutzerdefinierten ArrayOfFoo-Typs können Sie sicherstellen, dass Sie arbeiten mit einem Array von Foo-Objekten und Funktionen können ein ArrayOfFoo-Argument empfangen.
Eine andere Möglichkeit besteht darin, eine Bibliothek wie Haldayne zu verwenden, um das Boilerplate für Mitgliedschaftsvoraussetzungsprüfungen zu verwalten:
<code class="php">class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects { protected function allowed($value) { return $value instanceof Foo; } }</code>
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Typhinweisen für Arrays von Objekten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!