Heim > Artikel > Backend-Entwicklung > Fragen zu PHP-Referenzen
//Rückgabe per Referenz
<code>function &testReturn(){ static $b = 1; $b += 2; return $b; } $a = &testReturn(); $a = 8; $c = &testReturn(); $c = 12; $d = testReturn(); //echo $d; function &cuitReturn(){ $a = 2; return $a; } $cr = &cuitReturn(); //echo $cr; $cr = 4; $cr1 = cuitReturn(); echo $cr1; </code>
Die zweite Funktion ändert den Wert der zugewiesenen Variablen, $cr = 4; warum ändert sich der Rückgabewert der Funktion nicht?
//Rückgabe per Referenz
<code>function &testReturn(){ static $b = 1; $b += 2; return $b; } $a = &testReturn(); $a = 8; $c = &testReturn(); $c = 12; $d = testReturn(); //echo $d; function &cuitReturn(){ $a = 2; return $a; } $cr = &cuitReturn(); //echo $cr; $cr = 4; $cr1 = cuitReturn(); echo $cr1; </code>
Die zweite Funktion ändert den Wert der zugewiesenen Variablen, $cr = 4; warum ändert sich der Rückgabewert der Funktion nicht?
Der Code Ihrer ersten Funktion sieht tatsächlich so aus, da $b
eine statische Variable ist und daher nach Ausführung der Funktion nicht freigegeben wird.
<code class="php">... //省略代码 $c = &$b; $c = 12; //此处$b为12 $d = testReturn(); //$b+2 echo $d; //当然是14而不是7</code>
Aber in der zweiten Funktion ist $a
eine lokale Variable. Nachdem die Funktion ausgeführt wurde, wird der Speicher dieser Variablen freigegeben.
Zuerst müssen wir klarstellen, ob die aufrufende Funktion eine Referenz zurückgibt Dem Funktionsnamen muss ein & vorangestellt werden, und der Zuweisungsanweisung muss ein & vorangestellt werden 🎜> im Titel der Frage ist eigentlich kein Hinweis
$cr1 = cuitReturn();
Zurück zu dem, was der Fragesteller gesagt hat: Warum hat sich der Rückgabewert nicht geändert? Das liegt daran, dass
eine lokale Variable und nicht statisch ist und daher nach der Rückkehr der Funktion Es entspricht dem Verweisen auf eine lokale Variable. cuitReturn
Wenn diese in C platziert wird, treten große Probleme auf ... Das bedeutet, dass der Zeiger auf unbekannten Speicher zeigt, $a
aber die PHP-Engine sollte damit umgehen, also $cr = &cuitReturn();
für Der Verweis auf ist ungültig