Heim > Artikel > Backend-Entwicklung > Eine kurze Diskussion über die Fallstricke der Verwendung von Referenzvariablen in foreach in PHP
Ich schreibe seit vielen Jahren, aber ich bin immer noch auf einen Fehler gestoßen, als ich in foreach auf Variablen verwiesen habe. Der Code lautet wie folgt:
<?php $arr = ['a', 'b', 'c', 'd', 'e']; foreach ($arr as $i=>&$a) { $a = $a.'_'. $a; echo $a .'<br>'; } echo '<hr>'; foreach ($arr as $i=>$a) { echo $a .'<br>'; } echo '<hr>'; print_r($arr);
Ausgabeergebnisse
Als ich zum ersten Mal das Ausgabeergebnis des zweiten foreach sah, war ich sehr verwirrt. Wie konnten zwei d_d ausgegeben werden?
Nach sorgfältiger Überlegung stellt sich heraus, dass der Gültigkeitsbereich von $a in PHP foreach eine lokale Variable der gesamten Funktion ist und daher auch außerhalb der Schleife gültig ist, anstatt in der Schleife eingeschlossen zu sein.
Wenn also das zweite foreach ausgeführt wird, ist $a keine neue Variable, zeigt aber immer noch auf die Adressreferenz des fünften Elements des $arr-Arrays
Wenn das zweite foreach ausgeführt wird In der Schleife wird tatsächlich dem 5. Element des $arr-Arrays weiterhin Werte zugewiesen,
Die spezifische Zuweisungssituation,
Das erste Mal: a_a wird dem 5. Element zugewiesen, Das Ergebnis ist: [a_a, b_b, c_c, d_d,a_a]
Das zweite Mal, dass b_b dem fünften Element zugewiesen wird, ist das Ergebnis: [a_a, b_b, c_c, d_d,b_b]
Das dritte Mal: c_c wird dem 5. Element zugewiesen, das Ergebnis ist: [a_a, b_b, c_c, d_d,c_c]
Das vierte Mal: d_d wird dem 5. Element zugewiesen, Das Ergebnis ist: [a_a, b_b, c_c, d_d, d_d]
Das fünfte Mal: Da das fünfte Element zu diesem Zeitpunkt zu d_d geworden ist, wird d_d erneut dem fünften Element zugewiesen, und das Ergebnis ist immer noch: [a_a, b_b, c_c, d_d,d_d]
Lösung:
1. Versuchen Sie, nicht denselben Schleifenvariablennamen zu verwenden. $a); nach jeder Verwendung oder vor der erneuten Verwendung die Adressanwendung entsperren
oder das obige Codebeispiel verwenden:
Ausgabeergebnis:$arr = ['a', 'b', 'c', 'd', 'e']; foreach ($arr as $i=>&$a) { $a = $a.'_'. $a; echo $a .'<br>'; } echo '<hr>'; echo $a; echo '<hr>'; // 这里 unset 掉 unset($a); echo $a = 'ccc'; echo '<hr>'; print_r($arr); echo '<hr>'; foreach ($arr as $i=>$a) { echo $a .'<br>'; } echo '<hr>'; print_r($arr);
Jetzt ist es normal, diese kleinen Details unbedingt zu beachten
Das Obige ist die kurze Diskussion des Herausgebers über die Fallstricke der Verwendung von Referenzvariablen in foreach in PHP. Ich hoffe, Sie werden das unterstützen PHP-Chinese-Website~
Mehr Eine kurze Diskussion über die Fallstricke der Verwendung von Referenzvariablen in foreach in PHP. Weitere Artikel finden Sie auf der PHP-Chinese-Website!