Maison >développement back-end >tutoriel php >Qu'est-ce qu'un générateur php ? 10 minutes pour vous aider à comprendre le générateur PHP avec des exemples

Qu'est-ce qu'un générateur php ? 10 minutes pour vous aider à comprendre le générateur PHP avec des exemples

墨辰丷
墨辰丷original
2018-06-07 15:37:142953parcourir

Avant d'expliquer les générateurs, introduisons les itérateurs :

En PHP, foreach est généralement utilisé pour parcourir des tableaux.

Et si on veut rendre un objet traversable ?

PHP nous fournit l'interface Iterator Tant que cette interface est implémentée, cet objet peut être itéré via foreach.

L'exemple est le suivant :

Quest-ce quun générateur php ? 10 minutes pour vous aider à comprendre le générateur PHP avec des exemples

Lorsque nous parcourons $it via foreach, PHP s'appellera dans l'ordre :

rewind( ) à réinitialiser à Le premier élément

valid() vérifie si la position actuelle est valide

current() renvoie l'élément actuel

key() renvoie la clé du L'élément actuel

next() pointe vers l'élément suivant. Le générateur

est une nouvelle fonctionnalité introduite dans PHP 5.5, mais peu de gens semblent l'utiliser actuellement.

Qu'est-ce qu'un générateur php ?

Ce qui suit est l'explication du générateur tirée de la documentation officielle PHP :

Le générateur fournit un moyen plus simple d'implémenter une itération d'objet simple, par rapport à la définition d'une classe pour implémenter l'interface Iterator. approche, les frais généraux de performance et la complexité sont considérablement réduits.

Les générateurs vous permettent d'écrire du code dans un bloc foreach pour parcourir un ensemble de données sans créer de tableau en mémoire, ce qui atteindrait votre limite de mémoire ou prendrait un temps de traitement considérable. Au lieu de cela, vous pouvez écrire une fonction génératrice, tout comme une fonction personnalisée normale, et au lieu qu'une fonction normale ne renvoie qu'une seule fois, le générateur peut produire autant de fois que nécessaire pour générer les valeurs qui doivent être itérées.

Afin de refléter les avantages du générateur, nous définissons ci-dessous une fonction de comparaison :

Quest-ce quun générateur php ? 10 minutes pour vous aider à comprendre le générateur PHP avec des exemples

Parce que créer un si grand tableau en mémoire pour l'itération, alors PHP indique directement que la limite de mémoire d'un seul processus a été dépassée.

Changeons-le en générateur :

Quest-ce quun générateur php ? 10 minutes pour vous aider à comprendre le générateur PHP avec des exemples

Vous pouvez voir que nous appelons func1() et renvoyons un objet Generator, qui peut être utilisé pour chaque itération, à chaque itération, PHP demandera à l'instance Generator de calculer et de fournir la prochaine valeur à itérer. L'élégance des générateurs est que chaque fois qu'une valeur est produite, l'état interne du générateur est mis en pause ; lorsque la valeur suivante est demandée au générateur, l'état interne est restauré. L'état interne du générateur continuera de basculer entre pause et reprise jusqu'à ce que la fin du corps de définition de la fonction soit atteinte ou qu'une instruction return vide soit rencontrée.

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