Heim  >  Artikel  >  Backend-Entwicklung  >  Fragen zu PHP-Referenzen

Fragen zu PHP-Referenzen

WBOY
WBOYOriginal
2016-08-31 08:54:511092Durchsuche

//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?

Antwortinhalt:

//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

in der Funktion

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn