PHP Pass by Reference dans Foreach
En PHP, les variables peuvent être soit des variables normales, soit des variables de référence. Lors de l'attribution d'une référence d'une variable à une autre variable, cette dernière devient une variable de référence, se liant essentiellement au même emplacement mémoire que l'originale. Ce comportement a des implications lors de l'utilisation de la boucle foreach avec la syntaxe de passage par référence (&).
Considérez le code suivant :
$a = ['zero', 'one', 'two', 'three']; foreach ($a as &$v) { } foreach ($a as $v) { echo $v . PHP_EOL; }
La sortie de ce code est :
zero one two two
Pourquoi cela se produit-il ?
Dans la première boucle foreach, chaque élément de $a est affecté comme référence à la variable $v. Cela signifie que toute modification de $v modifie également l'élément correspondant dans $a.
Plus précisément, lors de la dernière itération de la première boucle, $v se voit attribuer la valeur de $a[3] (c'est-à-dire ' trois'). Cependant, cette affectation crée une relation de référence, donc $a[3] devient une variable de référence (même si elle n'est pas affectée explicitement à l'aide de &).
Dans la deuxième boucle foreach, les valeurs des éléments dans $ a sont imprimés. Cependant, puisque $a[3] est désormais une variable de référence, sa valeur change avec la valeur de $v. Lorsque $v reçoit la valeur « deux » lors de la troisième itération, $a[3] devient également « deux ».
En conséquence, lors de la dernière itération, $v (qui pointe toujours vers $a [3]) a la valeur « deux », et « deux » est imprimé. Cela explique pourquoi « deux » est répété dans la dernière itération, au lieu d'imprimer « trois » comme on pourrait s'y attendre intuitivement.
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!