Maison > développement back-end > tutoriel php > Comment la boucle « foreach » de PHP fonctionne-t-elle réellement sous le capot ?

Comment la boucle « foreach » de PHP fonctionne-t-elle réellement sous le capot ?

Mary-Kate Olsen
Libérer: 2025-01-02 22:56:39
original
547 Les gens l'ont consulté

How Does PHP's `foreach` Loop Actually Work Under the Hood?

Comment fonctionne réellement PHP 'foreach' ?

Foreach en PHP prend en charge l'itération sur trois types de valeurs : les tableaux, les objets normaux et objets traversables.

Itération de tableaux et d'objets :

Pour tableaux et objets, le mécanisme d’itération est plus complexe. Les tableaux PHP sont en fait des dictionnaires ordonnés qui sont parcourus selon l'ordre d'insertion. Itérer sur des objets simples est similaire à itérer sur des tableaux car les propriétés des objets sont également stockées sous forme de dictionnaire.

Pendant l'itération, le pointeur de tableau interne n'est pas directement utilisé. Au lieu de cela, un HashPointer est utilisé pour garder une trace de l'élément actuel. Une fois le corps de la boucle exécuté, le HashPointer sera restauré, mais uniquement si l'élément existe toujours. Sinon, le pointeur de tableau actuel sera utilisé.

Si le tableau n'est pas une référence et a un nombre de références supérieur à 1, il est dupliqué avant l'itération. Cette duplication est effectuée pour empêcher les modifications IAP de s'infiltrer dans le tableau d'origine.

Modification pendant l'itération :

PHP autorise les modifications pendant l'itération, ce qui peut conduire à un comportement déroutant. . Si un élément est supprimé au cours de l'itération, le HashPointer sera avancé à l'élément suivant uniquement si le mécanisme de sauvegarde/restauration du HashPointer réussit. En cas d'échec, le pointeur de tableau actuel (qui se trouve à la fin du tableau) sera utilisé à la place.

Les boucles imbriquées peuvent également affecter le comportement de foreach. Si l'élément actuel de la boucle externe est supprimé, la boucle externe s'arrêtera après la première itération car le HashPointer ne parviendra pas à restaurer.

Modifications PHP 7 :

PHP 7 a introduit plusieurs modifications dans l'itération foreach :

  • Les itérateurs de table de hachage sont utilisés à la place du pointeur de tableau interne. Cela permet d'effectuer plusieurs boucles foreach simultanées sans conflits.
  • La duplication de tableau pendant l'itération par valeur ne se produit que si le tableau est modifié. Auparavant, la duplication se produisait même si le tableau était uniquement référencé.
  • Les objets se comportent désormais comme des références même dans des contextes par valeur.
  • Le comportement de foreach n'est plus affecté par reset() ou autre fonctions qui changent le pointeur du tableau.

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