3 Stimmen

Ist es möglich, print_r's Verhalten auf ein ArrayIterator-Objekt in PHP zu überschreiben?

Ich habe eine PHP-Klasse, die die ArrayIterator und hat alle notwendigen Methoden implementiert, so dass es sich wie ein Array verhält.

Das funktioniert gut für Dinge wie foreach Schleifen, aber der Aufruf von print_r darauf gibt immer noch die Variablen des Objekts aus, anstatt sie wie ein Array zu drucken.

Gibt es eine Möglichkeit, dieses Verhalten außer Kraft zu setzen, so dass der Aufruf von print_r (und ich schätze var_dump ) eine benutzerdefinierte Ausgabe für dieses Objekt ausgibt?

7voto

Felix Kling Punkte 751464

Nein, denn sie ist so konzipiert, dass sie Informationen über die Variable (d.h. sie wird zur Fehlersuche verwendet) und nicht nur, um eine Zeichenkettendarstellung der Variable zu geben.

Sie können überschreiben __toString aber und verwenden echo .

6voto

Radon8472 Punkte 3443

Seit PHP 5.6 ist die magische Methode __debuginfo hinzugefügt wurde, sollten Sie, wenn Sie es implementieren, in der Lage sein, die var_dump y print_r Verhalten.

seh hier: http://php.net/manual/language.oop5.magic.php#object.debuginfo

1voto

Clement Herreman Punkte 9956

Ich glaube nicht, dass das der Fall ist, es sei denn, Sie verwenden PHP Runkit aber ich würde dies nicht empfehlen, da es das erwartete Verhalten, das Ihr Benutzer erwartet, verändern würde.

Eine andere gute Möglichkeit wäre, eine eigene Funktion zu erstellen (z.B.: my_print_r() { /* some code */ } oder verwenden Sie die __toString() magische Methode.

Wofür ist das?

1voto

wimvds Punkte 12683

Und warum benutzen Sie nicht die getArrayCopy Methode?

d. h.

print_r($yourIterator->getArrayCopy());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X