PHP Vantaggi dei generatori


Esempio

PHP 5.5 introduce i generatori e la parola chiave yield, che ci consente di scrivere codice asincrono che assomiglia più al codice sincrono.

L'espressione yield è responsabile di restituire il controllo al codice chiamante e fornire un punto di ripresa in quel luogo. Si può inviare un valore lungo l'istruzione di yield . Il valore di ritorno di questa espressione è null o il valore che è stato passato a 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

Questo meccanismo può essere utilizzato da un'implementazione di coroutine per attendere gli Awaitables restituiti dal Generatore (registrandosi come callback per la risoluzione) e continuare l'esecuzione del Generatore non appena viene risolto l'Awaitable.