Classe de générateur PHP

WBOY
Libérer: 2023-08-29 11:14:02
avant
580 Les gens l'ont consulté

Classe de générateur PHP

Introduction

Itérer sur de grandes quantités de données à l'aide de structures de boucles (telles que foreach) nécessitera beaucoup de mémoire et un temps de traitement considérable. Utilisez Generators pour parcourir un ensemble de données sans cette surcharge. Les fonctions du générateur sont comme les fonctions ordinaires. Cependant, au lieu d'une instruction return dans la fonction, le générateur est exécuté à plusieurs reprises en utilisant le mot-clé yield pour fournir les valeurs sur lesquelles itérer.

Le mot-clé rendement est au cœur du mécanisme générateur. Bien que son utilisation ressemble à return, elle n’arrête pas l’exécution de la fonction. Il fournit la valeur suivante de l'itération et met en pause l'exécution de la fonction.

Syntaxe

Generator implements Iterator {
   /* Methods */
   public current ( void ) : mixed
   public getReturn ( void ) : mixed
   public key ( void ) : mixed
   public next ( void ) : void
   public rewind ( void ) : void
   public send ( mixed $value ) : mixed
   public throw ( Throwable $exception ) : mixed
   public valid ( void ) : bool
   public __wakeup ( void ) : void
}
Copier après la connexion

Méthodes

public Generator::current ( void ) − mix — Récupère la valeur générée

public Generator::getReturn ( void ) : mix — Récupère la valeur de retour du générateur

public Generator::key ( void ) − mix — Obtenez la clé de la valeur générée.

p>

public Generator::next ( void ) − void — Reprise de l'exécution du générateur. L'effet est le même que si vous appeliez Generator::send() avec NULL comme argument.

public Generator::rewind ( void ) − void — Rembobine l'itérateur. Cela lèvera une exception si l'itération a déjà commencé.

public Generator::send (mixed $value) : mix - Envoie la valeur donnée au générateur en tant que résultat de l'expression de rendement actuelle et restaure le générateur.

public Generator::throw ( Throwable $exception ) − mix — Lance une exception dans le générateur et reprend l'exécution du générateur.

public Generator::valid ( void ) − bool — Vérifie si l'itérateur a été fermé

public Generator::__wakeup ( void ) − void — Déclenche une exception car le générateur ne peut pas être sérialisé.

La classe Generator implémente l'interface Iterator. Les objets générateurs ne peuvent pas être instanciés via new. Toute fonction définie par l'utilisateur avec le mot-clé rendement crée un objet de la classe générateur.

Exemple de générateur

Étant donné que le générateur implémente l'interface Iterator, chaque boucle peut être utilisée pour parcourir les valeurs générées.

Démonstration en direct

<?php
function squaregenerator(){
   for ($i=1; $i<=5; $i++){
      yield $i*$i;
   }
}
$gen=squaregenerator();
foreach ($gen as $val){
   echo $val . " ";
}
?>
Copier après la connexion

Output

Le programme ci-dessus affiche la sortie suivante

1 4 9 16 25
Copier après la connexion

L'exemple suivant utilise les méthodes current() et next() de la classe générateur pour parcourir les valeurs générées. Utilisez la méthode valid() pour vérifier les conditions de la boucle.

Exemple

Démonstration en direct

<?php
function squaregenerator(){
   for ($i=1; $i<=5; $i++){
      yield $i*$i;
   }
}
$gen=squaregenerator();
while ( $gen->valid() ){
   echo "key: " . $gen->key(). " value: ". $gen->current() . "";
   $gen->next();
}
?>
Copier après la connexion

Sortie

Le programme ci-dessus montre la sortie suivante

key: 0 value: 1
key: 1 value: 4
key: 2 value: 9
key: 3 value: 16
key: 4 value: 25
Copier après la connexion

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!

Étiquettes associées:
source:tutorialspoint.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal