Maison > développement back-end > tutoriel php > Comment fonctionne la boucle « foreach » de PHP en PHP 5 et PHP 7 ?

Comment fonctionne la boucle « foreach » de PHP en PHP 5 et PHP 7 ?

Linda Hamilton
Libérer: 2024-12-31 03:22:10
original
268 Les gens l'ont consulté

How Does PHP's `foreach` Loop Work in PHP 5 and PHP 7?

Comprendre la boucle 'foreach' de PHP

'foreach' prend en charge l'itération sur trois types de valeurs :

  • Tableaux
  • Objets normaux
  • Traversable objets

Itération de tableaux et d'objets

Les tableaux et les objets sont parcourus sous forme de dictionnaires ordonnés. Le parcours d'objets simples est similaire au parcours de tableaux car ils sont représentés en interne sous forme de dictionnaires ordonnés.

Changements internes pendant l'itération

  • Itération de tableau par référence ou itération de les objets (sémantique par handle) permettent une modification en boucle pendant l'itération.
  • Itération sur des tableaux avec un nombre de références supérieur à 1 peut dupliquer le tableau avant modification.

Approche PHP 5

  • Utilise un pointeur de tableau interne (IAP) pour suivre la position.
  • Utilise en outre un HashPointer pour prendre en charge plusieurs boucles « foreach » simultanées.
  • Duplication de tableau se produit si le nombre de références est supérieur à 1 et que le tableau n'est pas une référence.
  • L'avancement de l'IAP se produit avant l'exécution du corps de la boucle.

PHP 7 Approche

  • Abandonne l'utilisation d'IAP entièrement.
  • Introduit les itérateurs de table de hachage enregistrés dans le tableau pour gérer les modifications en cours d'itération.
  • La duplication de tableau dans l'itération de tableau par valeur ne se produit que si le tableau est modifié pendant la boucle.
  • Le comportement de 'foreach' n'est plus influencé par 'current()' ou 'reset()'.

Réponses à vos questions

1. Est-ce correct et toute l'histoire ?

Votre compréhension de « foreach » comme travaillant avec une copie de tableau mais affectant le pointeur de tableau est correcte. Cependant, dans PHP 7, « foreach » n'utilise plus l'IAP et s'appuie plutôt sur des itérateurs de table de hachage, ce qui entraîne un comportement plus cohérent et prévisible.

2. Que fait-il réellement ?

  • PHP 5 : utilise une combinaison d'IAP et de HashPointer pour prendre en charge les itérations, avec un potentiel de duplication et un comportement inattendu dans certains cas.
  • PHP 7 : Utilise des itérateurs de table de hachage qui ne sont pas affectés par la boucle « foreach » et gèrent correctement les modifications pendant itération.

3. Existe-t-il des situations dans lesquelles l'utilisation de fonctions qui ajustent le pointeur de tableau lors d'un « foreach » peut affecter le résultat de la boucle ?

  • PHP 5 : 'each()' et 'reset()' peuvent influencer le comportement des boucles 'foreach' imbriquées et peuvent même rencontrer un comportement inattendu en raison de collisions de hachage.
  • PHP 7 : Les fonctions qui ajustent le pointeur de tableau n'ont aucun effet sur le comportement de 'foreach' car elles ne dépendent plus du IAP.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal