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 beachten:
<?php
class foo {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue ist eine Referenz zu to $obj->value, mit dem Wert 42.
$obj->value = 2;
echo $myValue; // Zeigt den neuen Wert von $obj->value, also 2.
?>
Hinweis: Im Gegensatz zur Parameterübergabe per Referenz ist bei der Rückgabe mittels Referenz an beiden Stellen die Angabe des & notwendig. Dies verdeutlicht, dass Sie eine Referenz und nicht wie gewöhnlich eine Kopie zurückgeben. Ebenfalls wird verdeutlicht, dass für $myValue im Gegensatz zur normalen Zuweisung ein Referencebinding durchgeführt wird.
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. Seit PHP 4.4.0 und PHP 5.1.0 wird ein
E_NOTICE
-Fehler erzeugt, wenn versucht wird, einen dynamischen Ausdruck oder das Ergebnis eines new zurückzugeben.