Mailinglisten-Archive |
On Wednesday 20 August 2003 21:51, Kai Meder wrote: > wenn man das nun mit print_r versucht darzustellen kommt es > logischerweise unweigerlich zu einem *RECURSION* Dann nutze var_dump(), der verfolgt die Rekursion nicht ;-) > meine frage ist jedoch, wie php das intern handhabt ? > existiert diese "rekursion" auch intern oder tritt die erst bei einer > rekursiven ausgabe auf ? > sprich killt solch ein vorgehen den parser ? lokal läufts hier ganz > fluffig ;) Wenn eine Rekursion schon für PHP-Probleme bringen würde, gäbe es ein Problem mit $GLOBALS, selbiges enthält eine Referenz auf sich selber ;-) Also Intern gibt es für jede Variable einen so genannten zval/pval-Container (pval = zval, zval ist bloß der modernere Name..) Wenn Du jetzt Eine Variable $foo hast und mit $bar = &$foo eine Refrenz erstellst, wird ein neuer zval-Container erstellt, den beiden wird dann gesagt, dass sie Referenzen sind. Über eine weitere Rekursion wird dort nicht "gedacht", die wird erst bei Bedarf ausgewertet. Naja, Details dazu finden sich im PHP-Source (wenn man viel Zeit hat *g*) oder in der einschlägigen Literatur (z.B. R.Lerdorf, K.Tatroe: Programming PHP, O'Reilly 2002 hat mir neues Wissen bezüglich der Internas gebracht, zudem gibt es auch http://php.net/zend ist ganz praktisch um die Erste Extension zu schreiben, gefällt mir persönlich aber nicht so gut...) Nunja, um den Bogen zum Thema zu schließen: Rekursive Datenstrukturen sind kein Problem. > kind of offtopic: ist es schlechter stil mit solchen verschachtelten > referenzen zu arbeiten oder völlig legitim ? imho schon, aber das sollen die "OOP-Götter" erläutern, die haben da mehr Ahnung ;-) johannes
php::bar PHP Wiki - Listenarchive