Maison >développement back-end >tutoriel php >Comment fonctionne réellement la boucle « foreach » de PHP et comment son implémentation a-t-elle changé entre PHP 5 et PHP 7 ?
Introduction :
foreach est largement utilisé en PHP pour le bouclage via des tableaux, des objets et d’autres structures de données. Comprendre son fonctionnement interne est crucial pour éviter tout comportement inattendu.
Trois types d'itérables foreach :
foreach prend en charge trois types d'itérables :
Itération d'objet traversable :
Pour les objets traversables, foreach agit comme un sucre syntaxique pour :
foreach ($it as $k => $v) {} translates to: if ($it instanceof IteratorAggregate) { $it = $it->getIterator(); } for ($it->rewind(); $it->valid(); $it->next()) { $v = $it->current(); $k = $it->key(); // ... }
Itération de tableau et d'objet :
Commandé Dictionnaires :
Les tableaux et objets PHP sont essentiellement des dictionnaires ordonnés qui maintiennent l'ordre d'insertion. L'itération suit cet ordre.
Conversion des objets :
Les représentations d'objets compressées sont converties en dictionnaires lors de l'itération. L'itération d'objet simple devient ainsi similaire à l'itération de tableau.
Pointeur de tableau interne (IAP) :
Les tableaux en PHP 5 ont un pointeur de tableau interne (IAP) qui prend en charge les modifications et les sauts. sur les éléments supprimés.
HashPointer :
foreach en PHP 5 utilise un HashPointer pour sauvegarder la position IAP et le hachage avant d'exécuter le corps de la boucle. Il le restaure ensuite si l'élément existe toujours ; sinon, il utilise la position IAP actuelle.
Duplication de tableaux :
foreach en PHP 5 duplique des tableaux qui ne sont pas des références (is_ref=0) et ont un refcount supérieur à 1.
PHP5 Exemples :
Modifications PHP 7 :
Itérateurs de table de hachage :
PHP 7 utilise des itérateurs de table de hachage externes, enregistrés dans le tableau. Chaque itérateur est avancé si l'élément correspondant est supprimé.
Aucune utilisation d'IAP par foreach :
foreach n'utilise plus l'IAP, éliminant ainsi le besoin de duplication. L'itération du tableau par valeur utilise toujours les éléments d'origine.
Duplication de tableau :
Les tableaux ne sont plus dupliqués lors de l'itération par valeur, quel que soit leur décompte ou leur statut de référence.
Exemples PHP 7 :
Améliorations supplémentaires de PHP 7 :
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!