Maison >développement back-end >tutoriel php >Comment fonctionne la boucle « foreach » de PHP en interne et comment son implémentation a-t-elle changé entre PHP 5 et PHP 7 ?

Comment fonctionne la boucle « foreach » de PHP en interne et comment son implémentation a-t-elle changé entre PHP 5 et PHP 7 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-29 11:59:11721parcourir

How Does PHP's `foreach` Loop Work Internally, and How Has Its Implementation Changed Between PHP 5 and PHP 7?

Comment fonctionne réellement PHP 'foreach' ?

Le foreach de PHP parcourt les tableaux, les objets et les objets Traversable.

Tableaux :

  • Foreach itère sur les clés et les valeurs d'un tableau.
  • Les modifications pendant l'itération peuvent entraîner un comportement inattendu.
  • En PHP 5, foreach utilise un pointeur de tableau interne (IAP) qui peut être partagé entre plusieurs boucles, conduisant à un comportement complexe.
  • Dans PHP 7, foreach utilise des itérateurs de table de hachage externes et sécurisés, éliminant ainsi le besoin de IAP.

Objets :

  • Foreach parcourt les propriétés et les valeurs d'un objet.
  • Les modifications au cours de l'itération sont reflétées dans le loop.
  • Cela est dû à la sémantique de transmission par handle de PHP, qui fait que les objets se comportent comme références.

Objets traversables :

  • Foreach fournit essentiellement un raccourci syntaxique pour parcourir les objets traversables.

Exemples :

  • Duplication : PHP 5 duplique les tableaux avant d'itérer si le tableau n'est pas une référence et a un nombre de références supérieur à 1. PHP 7 évite cette duplication autant que possible.
  • Ordre d'avancement de la position : Foreach avance le pointeur du tableau avant que le corps de la boucle ne s'exécute, donc cela fonctionne sur l'élément i 1 tandis que le corps de la boucle est toujours sur l'élément i.
  • Modification pendant l'itération : Foreach ignore les éléments supprimés dans PHP 5 en raison de son recours au PEI. En PHP 7, foreach continue d'itérer même après la suppression de l'élément.
  • Reset() et Each() : En PHP 5, les mécanismes de sauvegarde et de restauration de HashPointer empêchent reset() d'affecter foreach. En PHP 7, reset() fonctionne indépendamment de foreach.
  • Entités substituées : PHP permet la substitution de l'entité itérée pendant la boucle (par exemple, commencer par un tableau et passer à un objet).

En résumé :

Le foreach de PHP parcourt efficacement les tableaux et les objets, fournissant accès pratique à leurs éléments. Comprendre les détails de son implémentation (en particulier les différences entre PHP 5 et PHP 7) peut vous aider à éviter un comportement inattendu lors de la modification des tableaux pendant l'itération.

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