Heim >Backend-Entwicklung >PHP-Tutorial >Warum zeigt die referenzierte Foreach-Schleife von PHP unerwartetes Verhalten?

Warum zeigt die referenzierte Foreach-Schleife von PHP unerwartetes Verhalten?

Barbara Streisand
Barbara StreisandOriginal
2024-12-13 12:57:101054Durchsuche

Why Does PHP's Referenced Foreach Loop Exhibit Unexpected Behavior?

Das seltsame Verhalten der referenzierten Foreach-Schleife von PHP verstehen

In PHP iteriert die foreach-Schleife über Elemente in einem Array oder Objekt. Bei Verwendung einer Referenz innerhalb der Schleife (z. B. foreach ($a as &$v) { ... }) kann es jedoch zu unerwartetem Verhalten kommen.

Das Problem

Betrachten Sie das folgende PHP-Skript:

$a = array('a', 'b', 'c', 'd');

foreach ($a as &$v) { }
foreach ($a as $v) { }

print_r($a);

Erwartet Ausgabe:

Ein Array mit den Elementen „a“, „b“, „c“ und „d“.

Tatsächliche Ausgabe:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => c
)

Erläuterung

Das unerwartete Verhalten entsteht, weil innerhalb der erstellte Referenzen erstellt wurden Die foreach-Schleife bleibt bestehen, nachdem die Schleife beendet ist. Insbesondere kann die Variable $v immer noch auf das letzte Element im Array $a verweisen.

Wenn die zweite foreach-Schleife ausgeführt wird, wird $v (ein Verweis auf das letzte Element in $a) der Wert neu zugewiesen jedes Elements im Array. Da $v eine Referenz auf das letzte Element in $a ist, wird das entsprechende Array-Element geändert.

Auflösung

Um dieses Verhalten zu verhindern, deaktivieren Sie immer die Referenzvariable nachdem die foreach-Schleife abgeschlossen ist:

$a = array('a', 'b', 'c', 'd');

foreach ($a as &$v) { }
unset($v);
foreach ($a as $v) { }

print_r($a);

Ausgabe:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
)

Das obige ist der detaillierte Inhalt vonWarum zeigt die referenzierte Foreach-Schleife von PHP unerwartetes Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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