Heim > Artikel > Backend-Entwicklung > Warum wird das letzte Element in einem PHP-Array dupliziert, wenn eine foreach-Schleife mit Referenzübergabe verwendet wird?
PHP Foreach Pass by Reference: Letztes Element-Duplikations-Rätsel enthüllt
Bedenken Sie den folgenden PHP-Code:
$arr = ["foo", "bar", "baz"]; foreach ($arr as &$item) { /* do nothing by reference */ } print_r($arr); foreach ($arr as $item) { /* do nothing by value */ } print_r($arr);
Bei der Ausführung wird das ursprüngliche Array $arr unerwartet geändert, was zu Folgendem führt Ausgabe:
Array ( [0] => foo [1] => bar [2] => baz ) Array ( [0] => foo [1] => bar [2] => bar )
Verstehen des Verhaltens
Nach der ersten foreach-Schleife bleibt die Variable $item ein Verweis auf denselben Speicherort wie $arr[2] . Folglich ersetzt jede Iteration der zweiten foreach-Schleife, die Argumente nach Wert übergibt, den referenzierten Wert (und damit $arr[2]) durch den Wert der neuen Iteration.
Detaillierte Erklärung
In der ersten Schleife:
Am Ende der ersten Schleife zeigt $item immer noch auf $arr[2].
Im zweiten Schleife:
Klarstellung Missverständnis
Dieses Verhalten wird nicht als Fehler angesehen. Es entspricht dem beabsichtigten Verhalten von Referenzen in PHP. Ähnliche Ergebnisse würden beobachtet, wenn Sie die folgende Syntax außerhalb einer Schleife verwenden würden:
for ($i = 0; $i < count($arr); $i++) { $item = $arr[$i]; }
Fazit
Bei der Arbeit mit Referenzen in PHP ist es wichtig, dies zu erkennen dass Änderungen, die über die referenzierte Variable vorgenommen werden, auch den ursprünglichen Wert beeinflussen. Dieses Verhalten kann je nach gewünschtem Ergebnis effektiv ausgenutzt oder vermieden werden.
Das obige ist der detaillierte Inhalt vonWarum wird das letzte Element in einem PHP-Array dupliziert, wenn eine foreach-Schleife mit Referenzübergabe verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!