Referenzen zurückgeben
Das Zurückgeben von Ergebnissen per Referenz aus Funktionen heraus kann manchmal recht nützlich sein, um herauszufinden, an welche Variable eine Referenz gebunden werden soll. Man sollte diese Funktionalität nicht aus Performancegründen benutzen, der Kern ist intelligent genug, um dies selbst zu optimieren. Man sollte Referenzen nur dann zurückgeben, wenn man sinnvolle technische Gründe hat. Hierbei ist folgende Syntax zu verwenden:
<?php
class foo {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue ist eine Referenz auf $obj->value, was den Wert 42 hat.
$obj->value = 2;
echo $myValue; // Zeigt den neuen Wert von $obj->value, also 2.
?>
Hinweis: Im Gegensatz zur Parameterübergabe ist hier an beiden Stellen die Angabe des
&
notwendig. Dies zeigt an, dass Sie eine Referenz und keine Kopie zurückgeben. Ebenfalls wird angezeigt, dass für $myValue im Gegensatz zur normalen Zuweisung eine Referenzbindung durchgeführt werden soll.
Hinweis: Wenn man versucht, eine Referenz aus einer Funktion mit der Syntax
return ($this->value);
zurückzugeben, wird das nicht funktionieren, weil man versucht, das Ergebnis eines Ausdrucks zurückzugeben und nicht eine Variable per Referenz. Man kann nur Variablen per Referenz aus einer Funktion zurückgeben - sonst nichts.
Um die zurückgegebene Referenz zu verwenden, muss Referenzzuweisung benutzt werden:
<?php
function &collector() {
static $collection = array();
return $collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
<?php
function &collector() {
static $collection = array();
return $collection;
}
array_push(collector(), 'foo');
?>
Hinweis: Es ist zu beachten, dass
array_push(&collector(), 'foo');
nicht funktioniert; es erzeugt einen fatalen Fehler.