Heim > Backend-Entwicklung > PHP-Tutorial > Warum ändert die Verwendung von Pass-by-Reference in einer PHP-„foreach'-Schleife das Array, nachdem die Schleife endet?

Warum ändert die Verwendung von Pass-by-Reference in einer PHP-„foreach'-Schleife das Array, nachdem die Schleife endet?

Susan Sarandon
Freigeben: 2024-11-13 09:19:02
Original
461 Leute haben es durchsucht

Why does using pass-by-reference in a PHP `foreach` loop modify the array after the loop ends?

PHP Foreach Pass by Reference und Array Modification

In PHP kann die Verwendung von Pass by Reference in einer foreach-Schleife zu unerwartetem Verhalten führen. Betrachten Sie den folgenden Code:

$arr = ["foo", "bar", "baz"];

foreach ($arr as &$item) {}
// Array remains unchanged: ["foo", "bar", "baz"]

foreach ($arr as $item) {}
// Array is modified: ["foo", "bar", "bar"]
Nach dem Login kopieren

Warum ändert die zweite Schleife das Array?

In der ersten Schleife wird die Variable $item als Referenz übergeben. Das bedeutet, dass an $item vorgenommene Änderungen auch das entsprechende Element im $arr-Array beeinflussen. In der zweiten Schleife wird $item jedoch als Wert übergeben. Daher wirken sich Änderungen an $item nicht auf das Array aus.

Entscheidend ist, dass $item nach der ersten Schleife immer noch auf das letzte Element von $arr verweist. Wenn die zweite Schleife das Array durchläuft, überschreibt jeder Wert von $item das letzte Element von $arr, da beide auf denselben Speicherort verweisen.

Debuggen der Ausgabe

Um das Verhalten zu verstehen, können wir den aktuellen Wert von $item wiedergeben und das Array $arr während jeder Schleife rekursiv ausgeben Iteration.

Erste Schleife:

foo
Array ( [0] => foo [1] => bar [2] => baz )

bar
Array ( [0] => foo [1] => bar [2] => baz )

baz
Array ( [0] => foo [1] => bar [2] => baz )
Nach dem Login kopieren

Nach der ersten Schleife zeigt $item auf das letzte Element von $arr.

Zweite Schleife:

foo
Array ( [0] => foo [1] => bar [2] => foo )

bar
Array ( [0] => foo [1] => bar [2] => bar )

bar
Array ( [0] => foo [1] => bar [2] => bar )
Nach dem Login kopieren

Da jeder Wert von $item überschrieben wird, wird er auch überschrieben ändert das letzte Element von $arr.

Ist es ein Bug?

Nein, dieses Verhalten ist kein Bug, sondern das beabsichtigte Verhalten der Pass-by-Reference . Es ist wichtig, die Auswirkungen der Übergabe von Variablen als Referenz zu verstehen und sie angemessen zu verwenden.

Das obige ist der detaillierte Inhalt vonWarum ändert die Verwendung von Pass-by-Reference in einer PHP-„foreach'-Schleife das Array, nachdem die Schleife endet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage