Mailinglisten-Archive |
Aloha > Von: Bastian Haustein[SMTP:phpug at haustein.plan-i.de] > > > weil ein Programmierer die Funktion xslt_process() > > optimiert hat ungefähr in der Form: > > > > function xslt_process($a, &$b, &$c){ > > .... > > } > > > > Damit werden die Parameter $b und $c als Referenz > > übergeben. Somit kannst du sie nicht so aufrufen, > > wie du das getan hast. > > Jetzt bin ich mal neugierig: Wenn da tatsächlich ein Wert übergeben werden > soll, warum dann die Referenz? Der Mechanismus ist dazu gedacht, die > Variable manipulieren zu können... Gibts da ne Doku zu? > http://de.php.net/manual/de/functions.arguments.php Der Mechanismus ist übrigens ÜBERHAUPT nicht dazu ge- dacht, die übergebenen Variablen auch manipulieren zu können - das ist schlechter Stil, das so zu tun. Bsp: function add5(&$a){ $a += 5; # Kurzform für $a = $a + 5; return($a); } # Aufruf: echo add5(10); # Fehler, Konstante Werte dürfen nicht per # Referenz übergeben werden $x = 5; echo add5($x); # Gibt 10 aus (wg. return($a). echo $x; # Gibt jetzt auch 10 aus, wg. Übergabe per # Referenz und $a += 5; in der Funktion. Daß in der letzten Zeile bei $x 10 ausgegeben werden, damit hätte man auf den ersten Blick auf den Code nicht gerechnet, erst recht nicht, wenn die Funktion add5() in einem Include oder ganz woanderst definiert ist. Deswegen finde ich, daß es einfach schlechter Stil ist, die Übergabeparameter in der Funktion klammheimlich zu ändern. Der Sinn einer Übergabe per Referenz ist, daß an die Funktion nur die Referenz an sich übergeben wird. Das ist sowas wie ein Handgriff auf die zu übergebenden Daten. Bsp: $a = array(.... riesending mit 10000 Einträgen). function foo($x) { .... } function bar(&$x) { .... } Beim Aufruf von foo($a) wird jetzt innerhalb von PHP das Riesen- array $a kopiert und an die Funktion übergeben. Das dauert und braucht entsprechend viel Speicher. Beim Aufruf von bar($a) wird nur der "Handgriff" an die Funktion übergeben, was zeitlich und vom Speicherverbrauch zu vernachlässigen ist. Hoffe, es ist jetzt etwas klarer geworden, Mathias
php::bar PHP Wiki - Listenarchive