Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion über die Fallstricke der Verwendung von Referenzvariablen in foreach in PHP

Eine kurze Diskussion über die Fallstricke der Verwendung von Referenzvariablen in foreach in PHP

高洛峰
高洛峰Original
2017-01-03 14:42:101258Durchsuche

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 = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;];
foreach ($arr as $i=>&$a) {
  $a = $a.&#39;_&#39;. $a;
  echo $a .&#39;<br>&#39;;
}
echo &#39;<hr>&#39;;
foreach ($arr as $i=>$a) {
  echo $a .&#39;<br>&#39;;
}
echo &#39;<hr>&#39;;
print_r($arr);

Ausgabeergebnisse

Eine kurze Diskussion über die Fallstricke der Verwendung von Referenzvariablen in foreach in PHP

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 = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;];
foreach ($arr as $i=>&$a) {
  $a = $a.&#39;_&#39;. $a;
  echo $a .&#39;<br>&#39;;
}
echo &#39;<hr>&#39;;
echo $a;
echo &#39;<hr>&#39;;
 
// 这里 unset 掉
unset($a);
 
echo $a = &#39;ccc&#39;;
echo &#39;<hr>&#39;;
print_r($arr);
echo &#39;<hr>&#39;;
foreach ($arr as $i=>$a) {
  echo $a .&#39;<br>&#39;;
}
echo &#39;<hr>&#39;;
print_r($arr);

Eine kurze Diskussion über die Fallstricke der Verwendung von Referenzvariablen in foreach in PHPJetzt 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!

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