function generator() { (yield 1); yield from generator2(); (yield 4); return 3; }
} ?> </p> <h2>Modifier la clé associée à la valeur</h2> <p class="col-sm-12"> <?php function generator2() { (yield 'a' => 'Itération 1'); (yield 'b' => 'Itération 2'); (yield 'c' => 'Itération 3'); (yield 'd' => 'Itération 4'); } foreach (generator2() as $key2 => $val2) { echo $key2 . ' => ' . $val2 . '<br>'; } ?> </p> <h2>Retourner une référence</h2> <p class="col-sm-12"> <?php class MyClassName { protected $myAttribut; public function __construct() { $this->myAttribut = ['refUn', 'refDeux', 'refTrois', 'refQuatre'];
<p><strong>envoyer des données au générateur</strong></p> <p class="col-sm-12"> <?php function generator() { echo yield; } $generator = generator(); $generator->send('<p>Hello world depuis la variable <code>$generator</code>!!!</p>'); function generator2() { echo (yield 'Hello world !'); echo yield; // echo yield; // Pour tester affichage du message3 } $generator2 = generator2(); // On envoie « Message 1 » // PHP va donc l'afficher grâce au premier echo du générateur $generator2->send('<p>Message 1</p>'); // On envoie « Message 2 » // PHP reprend l'exécution du générateur et affiche le message grâce au 2ème echo $generator2->send('<p>Message 2</p>'); // On envoie « Message 3 » // La fonction générateur s’était déjà terminée, donc rien ne se passe $generator2->send('<p>Message 3</p>'); ?> </p> <h2>Un exemple multitâche</h2> <p><strong>envoyer des données au générateur</strong></p>
function generator() { yield from generator2(); return 3; }