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 :
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!