Heim >Backend-Entwicklung >PHP-Tutorial >Warum führt PHPs „foreach' mit Pass-by-Reference zu unerwarteten Ergebnissen?
PHP-Übergabe per Referenz in foreach
In PHP ermöglicht die Übergabe per Referenz einer Funktion oder Methode, die Originalvariable statt einer Kopie zu ändern . Bei Verwendung in einer foreach-Schleife kann es zu unerwartetem Verhalten führen, wenn es nicht vollständig verstanden wird.
Erklärung der Ausgabe: null eins zwei zwei
Im bereitgestellten Code:
$a = array ('zero','one','two', 'three'); foreach ($a as &$v) {} foreach ($a as $v) { echo $v.PHP_EOL; }
Die erste foreach-Schleife verwendet die Referenzübergabe (&), um die Array-Elemente direkt zu ändern. Das bedeutet, dass eine Änderung des Werts von $v sich direkt auf das entsprechende Element im Array $a auswirkt.
In der ersten Schleife wird der Wert jedes Elements auf Null gesetzt. Dies liegt daran, dass, wenn in einer Pass-by-Reference-Schleife kein Wert zugewiesen wird, der entsprechende Wert im Array auf Null gesetzt wird.
In der zweiten Schleife zeigt die Ausgabe beginnend den aktuellen Wert jedes Elements aus dem geänderten nullifizierten Array. Die ersten drei Elemente behalten ihre zugewiesenen Werte aus der Initialisierung bei. Allerdings wurde das vierte Element ($a[3]) in der ersten Schleife auf Null gesetzt.
Daher drucken die nachfolgenden Iterationen der zweiten Schleife die ursprünglichen Werte (null, eins und zwei). gefolgt vom Nullwert für $a[3]. In der letzten Iteration zeigt der Wert von $v immer noch auf den Nullwert von $a[3], was dazu führt, dass „two“ als Ausgabe wiederholt wird, da es der letzte zugewiesene Wert vor dem Nullen war.
Das obige ist der detaillierte Inhalt vonWarum führt PHPs „foreach' mit Pass-by-Reference zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!