Oft sehen wir Code wie diesen (aus dem CI-Framework-Quellcode):
$class =& load_class('a','b');
Wir alle wissen, dass sich das „&“ darin auf eine Referenz bezieht, aber welche Rolle spielt es? Welche Probleme kann es lösen? Mit diesen Fragen beginnen wir, „Referenzrendite“ zu verstehen.
Referenzrückgabe
Das Handbuch sagt Folgendes: Die Referenzrückgabe wird verwendet, wenn Sie eine Funktion verwenden möchten, um herauszufinden, an welche Variable die Referenz gebunden werden soll. Verwenden Sie keine Rückgabereferenzen, um die Leistung zu steigern. Die Engine ist intelligent genug, um sie selbst zu optimieren. Geben Sie Referenzen nur zurück, wenn ein triftiger technischer Grund vorliegt! Um eine Referenz zurückzugeben, verwenden Sie diese Syntax:
<?php class foo { public $value = 42; public function &getValue() { return $this->value; } } $obj = new foo; // $myValue is a reference to $obj->value, which is 42. // $myValue 是 $obj->value 的引用,它们的值都是 42 $myValue = &$obj->getValue(); // 对 $obj->value 重新复制,会影响到 $myValue 的值 $obj->value = 2; // prints the new value of $obj->value, i.e. 2. echo $myValue; // 程序输出 2 ?>
In diesem Beispiel wird der Eigenschaft des von der getValue()-Funktion zurückgegebenen Objekts ein Wert zugewiesen und nicht kopiert, genau wie ohne Referenzsyntax zu verwenden. Gleiches.
unterscheidet sich von der Parameterübergabe. Das kaufmännische Und muss hier an beiden Stellen verwendet werden – es zeigt an, dass eine Referenz anstelle einer üblichen Kopie zurückgegeben wird. Es zeigt auch an, dass $myValue als Referenz gebunden ist und nicht als gewöhnliche Abtretung.
Wenn Sie versuchen, eine Referenz von einer Funktion wie dieser zurückzugeben: return ($this->value);, funktioniert dies nicht, da Sie versuchen, das Ergebnis eines Ausdrucks<🎜 zurückzugeben > anstelle einer referenzierten Variablen. Sie können Referenzvariablen nur von Funktionen zurückgeben, eine andere Möglichkeit gibt es nicht. Wenn Code versucht, einen dynamischen Ausdruck oder das Ergebnis des neuen Operators zurückzugeben, wird ab PHP 4.4.0 und PHP 5.1.0 ein E_NOTICE-Fehler ausgegeben.
Scheinen Sie zu verstehen, aber nicht zu verstehen? Schreiben wir also das Programm um und machen es zu einer regulären Funktion:<?php class foo { public $value = 42; public function getValue() { return $this->value; } } $obj = new foo; $myValue = $obj->getValue(); $obj->value = 2; echo $obj->value; // 程序输出 2 echo $myValue; // 程序输出 42 ?>
<?php function &test() { // 声明一个静态变量 static $b = 0; $b = $b+1; echo $b; return $b; } $a = test();//这条语句会输出 $b 的值为 1 $a = 5; $a = test();//这条语句会输出 $b 的值为2 $a = &test();//这条语句会输出 $b 的值为3 $a = 5; $a = test();//这条语句会输出 $b的值 为6 ?>
$a = &test(); $a = 5;
Das obige ist der detaillierte Inhalt vonWas ist eine PHP-Referenzrückgabe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!