Passage par référence dans foreach : comprendre le comportement inattendu
La boucle PHP foreach parcourt chaque élément d'un tableau, mais dans certains cas , sa sortie peut être surprenante. Considérez le code suivant :
$a = ['zero', 'one', 'two', 'three']; foreach ($a as &$v) { } foreach ($a as $v) { echo $v . PHP_EOL; }
Il est prévu que le résultat soit « zéro », « un », « deux » et « trois ». Cependant, si vous exécutez ce code, vous obtiendrez « zéro », « un », « deux », « deux » à la place.
Ce comportement inattendu découle du concept PHP de variables par référence. Dans la première boucle foreach, nous utilisons l'opérateur de référence "&" pour créer une variable de référence ($v) pour chaque élément du tableau $a. Cela signifie que toute modification apportée à $v affectera également l'élément correspondant dans $a.
Initialement, tous les éléments de $a sont des variables normales. Cependant, après la première boucle, seul $a[3] reste une variable de référence. En effet, lors de l'itération dans le tableau, la variable de référence précédente ($v) est écrasée par chaque nouvel élément.
Dans la deuxième boucle, lorsque nous faisons écho à $v, elle pointe vers $a[3], qui a été défini sur « deux » lors de l'itération précédente. Par conséquent, « deux » est repris au lieu de « trois » dans la dernière itération.
En comprenant la différence entre les variables normales et les variables de référence, et comment elles interagissent dans une boucle foreach, nous pouvons éviter de tels comportements inattendus et assurez-vous que notre code fonctionne comme prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!