PHP Avantages des générateurs


Exemple

PHP 5.5 introduit Generators et le mot-clé yield, ce qui nous permet d’écrire un code asynchrone qui ressemble plus à du code synchrone.

L'expression de yield est chargée de redonner le contrôle au code d'appel et de fournir un point de reprise à cet endroit. On peut envoyer une valeur le long de l'instruction de yield . La valeur de retour de cette expression est null ou la valeur qui a été transmise à Generator::send() .

function reverse_range($i) {
    // the mere presence of the yield keyword in this function makes this a Generator
    do {
        // $i is retained between resumptions
        print yield $i;
    } while (--$i > 0);
}

$gen = reverse_range(5);
print $gen->current();
$gen->send("injected!"); // send also resumes the Generator

foreach ($gen as $val) { // loops over the Generator, resuming it upon each iteration
    echo $val;
}

// Output: 5injected!4321

Ce mécanisme peut être utilisé par une implémentation de coroutine pour attendre les Awaitables générés par le générateur (en s'enregistrant en tant que rappel pour la résolution) et poursuivre l'exécution du générateur dès que le fichier en attente est résolu.