Maison >développement back-end >tutoriel php >Classe de générateur PHP

Classe de générateur PHP

WBOY
WBOYavant
2023-08-29 11:13:07589parcourir

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
}

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 . " ";
}
?>

Output

Le programme ci-dessus affiche la sortie suivante

1 4 9 16 25

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();
}
?>

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

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer