Comprendre le comportement étrange de la boucle Foreach référencée de PHP
En PHP, la boucle foreach parcourt les éléments d'un tableau ou d'un objet. Cependant, lors de l'utilisation d'une référence dans la boucle (par exemple, foreach ($a as &$v) { ... }), un comportement inattendu peut se produire.
Le problème
Considérez le script PHP suivant :
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Attendu Sortie :
Un tableau avec les éléments 'a', 'b', 'c' et 'd'.
Sortie réelle :
Array ( [0] => a [1] => b [2] => c [3] => c )
Explication
Le comportement inattendu survient car les références créées au sein la boucle foreach persiste après la fin de la boucle. Plus précisément, le dernier élément du tableau $a peut toujours être référencé par la variable $v.
Lorsque la deuxième boucle foreach s'exécute, $v (une référence au dernier élément de $a) se voit réaffecter la valeur. de chaque élément du tableau. Puisque $v est une référence au dernier élément de $a, l'élément de tableau correspondant est modifié.
Résolution
Pour éviter ce comportement, désactivez toujours la variable de référence une fois la boucle foreach terminée :
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
Sortie :
Array ( [0] => a [1] => b [2] => c [3] => d )
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!