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!