Mailinglisten-Archive |
Hi Peter, On Friday 28 May 2004 14:38, Peter Bieling wrote: > da das Thema gerade aktuell ist, mal eine allgemeine Frage zu > Referenzen. Bisher habe ich die in PHP noch nicht weiter verwendet, > daher mal ganz naiv gefragt: > Gibt es messbare Vorteile durch den Einsatz von Referenzen? In der Geschwindigkeit ist ein Aufruf per Referenz ist bei einem durchschnittlichen Objekt (oder auch einem anderen Datentyp) nicht wirklich anders als das kopieren. Bei "normalen" Variablen ist ein Call-by-value, also Kopieren der Variablen, auch sinniger. Wenn ich sowas habe: <?php $a = 1; echo my_function($a); ?> Will ich in der my_function ja in der Regel den Wert $a verarbeiten: <?php function my_function($param) { $param += 23; return $param; } ?> Da sollte das originale $a nicht verändert werden. Bei Objekten will man hingegen die Methoden des selben aufrufen und die sllen dann häufigauch auf dem Objekt arbeiten und es - wenn nötig auch verändern. > Ab welcher Größenordnung wirkt sich das überhaupt aus und warum macht Muss schon rehct groß sein.... > das PHP nicht automatisch per Referenz, wenn der Referenzaufruf > sinnvoller ist? Weil mit der ZendEngine1, also PHP4, ein Objekt eine ganznormale Variable ist die sich intern im Grundsätzlichen kaum von einem anderen Datentyp unterscheidet. Was zu so kuriosen Dingen führt, dass selbst <?php $objekt = new myClass(); ?> Eine Kopie des frisch erstellten Objektes erstellt. Mit der ZE2, also PHP5, wird das alles besser. Da sind Objekte intern (vereinfacht dargestellt) nur Zeiger auf das, getrennt von der Variable gespeicherte Objekt.Wenn ich da somit die Variable kopiere zeigt die immenroch auf die selbe interne Datenstruktur, wodurch es so wirkt als ob das Referenziert werden würde. <?php class meineKlasse { var $val; function meineKlasse($wert) { $this->val = $wert; } } function changeWert($o) { $o->val='bar'; } $objekt = new meineKlasse('foo'); changeWert($objekt); echo $objekt->val; ?> Gibt z.B. mit PHP4 "foo" aus, wohingegen es mit PHP5 "bar" ausgibt. Letzteres ist man aus anderen Sprahcen gewohnt und macht wohl auch mehr Sinn ;-) johannes
php::bar PHP Wiki - Listenarchive