phpbar.de logo

Mailinglisten-Archive

[php] XSLT Error

[php] XSLT Error

Gloss Mathias Mathias.Gloss at start.de
Die Aug 26 15:58:00 CEST 2003


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