Wie gehe ich mit Typhinweisen für Arrays von Objekten um?

Patricia Arquette
Freigeben: 2024-10-18 07:02:03
Original
800 Leute haben es durchsucht

How to Handle Type Hinting for Arrays of Objects?

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

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

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

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!