Bademeister: print_r() auf Array-Objekte

Hi,

(eher aus Interesse als aus praktischer Notwendigkeit) folgende PHP-Frage:

Wenn ich auf ein Objekt der Klasse ArrayObject print_r() anwende, dann wird genau das vom Objekt simulierte Array ausgegeben, also genau diejenigen Eigenschaften, über die die Objektiteration erfolgt.

Nun habe ich eine andere Klasse, die "von Hand" die Interfaces ArrayAccess und Iterator implementiert. Davon lässt sich print_r() noch nicht aus der Ruhe bringen, es liefert eine normale Objekt-Ausgabe.

ArrayObject implementiert IteratorAggregate (und nicht, wie ich, Iterator), und nutzt standardmäßig einen Iterator der Klasse ArrayIterator. Die stellt aber keine Methoden bereit, die ich nicht auch bereit stelle.

Also meine Frage: Wie überlistet ArrayObject die Funktionen print_r() und var_dump()? Weiß jemand Rat?

Danke, viele Grüße
der Bademeister

  1. Hi!

    Also meine Frage: Wie überlistet ArrayObject die Funktionen print_r() und var_dump()? Weiß jemand Rat?

    Mit ArrayObject::setFlags() lässt sich zumindest schonmal das Verhalten beeinflussen (Werte: 0 oder 1). Mehr weiß ich auch nicht und hab's auch nicht herausfinden können.

    Lo!

    1. Mit ArrayObject::setFlags() lässt sich zumindest schonmal das Verhalten beeinflussen (Werte: 0 oder 1).

      Danke, das klingt nach einem Anhaltspunkt. Die beiden moeglichen Flags scheinen genau dafuer zustaendig zu sein. Habe leider noch nicht rausgefunden, ob und wie man das selber implementieren kann, aber ich werde dem nochmal nachgehen, wenn ich etwas Zeit habe.

      Danke, viele Gruesse,
      der Bademeister