Warum überschreibt PHP Werte, wenn ich dieses Array zweimal durchlaufe (als Referenz, als Wert)

Wenn ich ein Array zweimal durchlaufe, einmal als Referenz und dann als Wert, überschreibt PHP den letzten Wert im Array, wenn ich für jede Schleife denselben Variablennamen verwende. Dies lässt sich am besten anhand eines Beispiels veranschaulichen:

$array = range(1,5);
foreach($array as &$element)
{
  $element *= 2;
}
print_r($array);
foreach($array as $element) { }
print_r($array);

Ausgabe

Array ([0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )

Array ([0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 8 )

Bitte beachten Sie, dass ich nicht nach einer Lösung suche. Ich möchte verstehen, warum dies geschieht. Beachten Sie auch, dass dies nicht der Fall ist, wenn die Variablennamen in jeder Schleife nicht jeweils mit @ bezeichnet sin$element, also ich vermute, es hat mit @ zu t$element befindet sich nach dem Ende der ersten Schleife noch im Gültigkeitsbereich und ist eine Referenz.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage