EisFuX: verschachtelte Arrays, Referenzen, endlose(?) Rekursion

Beitrag lesen

Hallo, Guten Morgen und Mahlzeit alle zusammen,

Wenn man sich (unter Zuhilfenahme von Referenzen) folgendes Array bastelt

  
$test = array( 1, 2, 3);  
$test[] = &$test;  

ergibt sich das Problem, dass eine darauf angesetzte Routine zum rekursiven Durchlaufen dieses Array in einem Endloslauf landen würde.

Das klassische Beispiel für so ein Array ist "$GLOBALS", dass in sich eine Referenz auf sich selbst enthält: "$GLOBALS['GLOBALS']".

Setzt man jetzt PHP-Funktionen darauf an, gehen diese ganz unterschiedlich vor:

print_r() meldet ordnungsgemäß diese "unendliche Verschachtelung" mit *RECURSION* -- gleich beim ersten mal.

var_dump() braucht eine Hierarchie-Ebene länger, bevor es mitbekommt, dass da das gleiche Array immer und immer wieder durchlaufen wird.

var_export() dagegen, scheint munter weiterlaufen zu wollen, wird aber irgendwann mit der Fehlermeldung "Fatal error: Nesting level too deep - recursive dependency?" abgebrochen.

Jetzt meine Frage: Wenn ich mir eine solche Funktion wie beispielsweise print_r() selbst schreiben möchte, wie kann ich erkennen, ob ein zu durchlaufendes Array schon mal durchlaufen wurde? Das PHP-Manual schweigt sich dazu aus. Es scheint auch nicht möglich sein, zu erkennen, ob eine Variable eine Referenz oder die "Original-Variable" darstellt.

Ach, ja: array_walk_recursive() hab ich mir schon angeschaut. Allerdings gibts das erst unter PHP5 als eingebaute Funktion, und das array_walk_recursive() aus PEAR_Compat hat keinerlei Abfragen nach Referenzen oder Endlos-Verschachtelungen eingebaut.

MffG
EisFuX

--
Erinnert mich ein Bisschen an die if-then-Schleifen von Java.
(Alexandra Freund, IT-Compactkurs)