Maison >développement back-end >tutoriel php >Pourquoi le « foreach » de PHP avec Pass-by-Reference produit-il des résultats inattendus ?

Pourquoi le « foreach » de PHP avec Pass-by-Reference produit-il des résultats inattendus ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-12 12:58:18946parcourir

Why Does PHP's `foreach` with Pass-by-Reference Produce Unexpected Results?

PHP Pass by Reference dans foreach

En PHP, le passage par référence permet à une fonction ou une méthode de modifier la variable d'origine plutôt qu'une copie . Lorsqu'il est utilisé dans une boucle foreach, il peut conduire à un comportement inattendu s'il n'est pas entièrement compris.

Explication du résultat : zéro un deux deux

Dans le code fourni :

$a = array ('zero','one','two', 'three');

foreach ($a as &$v) {}

foreach ($a as $v) {
  echo $v.PHP_EOL;
}

La première boucle foreach utilise le passage par référence (&) pour modifier directement les éléments du tableau. Cela signifie que lorsque la valeur de $v est modifiée, cela affecte directement l'élément correspondant dans le tableau $a.

Dans la première boucle, la valeur de chaque élément est définie sur null. En effet, lorsqu'aucune valeur n'est attribuée dans une boucle de passage par référence, la valeur correspondante dans le tableau est définie sur null.

Dans la deuxième boucle, la sortie affiche la valeur actuelle de chaque élément, en commençant à partir du tableau annulé modifié. Les trois premiers éléments conservent les valeurs qui leur ont été attribuées lors de l'initialisation. Cependant, le quatrième élément ($a[3]) a été défini sur null dans la première boucle.

Par conséquent, les itérations suivantes de la deuxième boucle impriment les valeurs d'origine (zéro, un et deux), suivi de la valeur nulle pour $a[3]. Dans la dernière itération, la valeur de $v pointe toujours vers la valeur nulle de $a[3], ce qui entraîne la répétition de « deux » comme sortie, car il s'agissait de la dernière valeur attribuée avant l'annulation.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn