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