phpbar.de logo

Mailinglisten-Archive

[php] print_r und rekursion

[php] print_r und rekursion

Johannes Schlueter schlueter at phpbar.de
Mit Aug 20 23:18:41 CEST 2003


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