Comment fonctionne les générateurs en PHP ?

Une fonctionnalité puissante de PHP est les générateurs.

Les générateurs offrent une manière simple d’itérer sur des données sans avoir besoin de créer et de stocker de grands tableaux en mémoire.

Que sont les générateurs en PHP ?

Les générateurs permettent d’itérer sur un ensemble de données sans charger l’intégralité de cet ensemble en mémoire.

Cela est particulièrement utile lorsque vous travaillez avec de grands ensembles de données ou des flux de données.

Les générateurs utilisent le mot-clé yield pour récupérer les valeurs une à la fois, en suspendant l’exécution et en sauvegardant l’état entre chaque valeur.

Itération traditionnelle vs. générateurs

Pour comprendre les avantages des générateurs, comparons-les aux méthodes d’itération traditionnelles.

Itération traditionnelle
Ce code crée un tableau de 100 nombres, puis itère dessus. Bien que cela fonctionne bien pour de petits tableaux de données, cela devient moins efficace pour de grands tableaux de données en raison de la consommation de mémoire.
Générateur
Dans ce cas, la fonction generateNumbers produit les nombres un par un sans créer un grand tableau, ce qui réduit la consommation de mémoire.

Comment fonctionnent les générateurs ?

Les générateurs sont créés à l’aide de fonctions contenant une ou plusieurs instructions yield.

Lorsqu’une fonction génératrice est appelée, elle renvoie un objet qui implémente l’interface Iterator.

Le générateur n’exécute pas son code tant que l’itération n’a pas commencé.

Dans cet exemple, la fonction getLinesFromFile lit un fichier ligne par ligne.
Au lieu de charger l’intégralité du fichier en mémoire, elle renvoie chaque ligne au fur et à mesure qu’elle est lue.
Cela est particulièrement utile pour traiter de gros fichiers.

Principales caractéristiques des générateurs

  1. Ils ne conservent qu’une seule valeur en mémoire à la fois.
  2. Ils conservent leur état entre les itérations, ce qui facilite la gestion de la logique d’itération complexe.
  3. Ils produisent des valeurs à la demande.