Heim >Backend-Entwicklung >PHP-Tutorial >Warum ändert die Verwendung von Referenzen in der „foreach'-Schleife von PHP unerwartet das letzte Array-Element?

Warum ändert die Verwendung von Referenzen in der „foreach'-Schleife von PHP unerwartet das letzte Array-Element?

Barbara Streisand
Barbara StreisandOriginal
2024-12-21 11:53:17150Durchsuche

Why Does Using References in PHP's `foreach` Loop Unexpectedly Modify the Last Array Element?

foreach with Reference (Foreach with &)

In PHP hat die Verwendung von Referenzen in einer foreach-Schleife Auswirkungen, die Benutzer beachten sollten. Dieses Konzept ist im folgenden Codeausschnitt zu sehen:

<br>$a = array('a', 'b', 'c', 'd');</p>
<p>foreach ($a as &$v) { }<br>foreach ($a as $v) { }</p>
<p>print_r($a);<br>

Dieser Code erscheint unkompliziert, aber sein Verhalten mag für manche rätselhaft erscheinen. Nach Ausführung der ersten Schleife bleiben die Werte im Array $a unverändert. Allerdings wird in der nachfolgenden Schleife das letzte Element von $a unerwartet mit den Werten „a“, „b“ und „c“ überschrieben. Dies liegt an einem wichtigen Verhalten in den foreach-Schleifen von PHP bei der Verwendung von Referenzen (gekennzeichnet durch das kaufmännische Und-Symbol (&)).

Referenz und Änderung des letzten Elements

Von Durch die Verwendung der Referenz & in der ersten Schleife wird $v zu einem Alias ​​für das aktuelle Element, das im Array durchlaufen wird. Wenn Änderungen an $v vorgenommen werden, ändern sie effektiv das ursprüngliche Element in $a. In diesem Fall durchläuft die dritte Schleife das Array, und obwohl $v keine Referenz mehr ist, zeigt es immer noch auf das mutierte letzte Element des Arrays ($a[3]) und überschreibt es mit den Werten aus vorherigen Iterationen .

PHP-Warnung

Dieses eigenartige Verhalten ist im PHP dokumentiert Handbuch:

Warnung: Die Referenz eines $value und das letzte Array-Element bleiben auch nach der foreach-Schleife erhalten. Es wird empfohlen, sie mit unset() zu zerstören.

Um das unerwartete Verhalten zu vermeiden, sollten Sie erwägen, die Referenz mit unset() zu zerstören, wie unten gezeigt:

<br>$a = array('a', 'b', 'c', 'd');</p>
<p>foreach ($a as &$v) { }<br>unset($v);<br>foreach ($a as $v) { }</p>
<p>print_r($a);<br>

By Indem Sie die Referenz explizit aufheben, stellen Sie sicher, dass nachfolgende Schleifen mit den ursprünglichen Werten im Array arbeiten. Dieser Ansatz verhindert eine unbeabsichtigte Änderung des Array-Inhalts.

Das obige ist der detaillierte Inhalt vonWarum ändert die Verwendung von Referenzen in der „foreach'-Schleife von PHP unerwartet das letzte Array-Element?. 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