„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie behebe ich Fehler beim Übergeben eines Arrays von Objekten als Funktionsargumente?

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

Veröffentlicht am 08.11.2024
Durchsuche:256

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

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.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729205596 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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