me e un collega ha trovato un comportamento molto strano utilizzando la nuova parola chiave "resa" in versione di PHP: 5.5.11 e vogliamo sapere se ciò che segue è normale:PHP Yield, strano comportamento
data è il seguente codice:
function yieldTest()
{
echo 'wtf1';
die('wtf2');
foreach (['foo', 'bar', 'baz'] as $each) {
yield $each;
}
}
var_dump(yieldTest());
la cosa curiosa è che se "resa" esiste nella funzione, sia: eco e dado è completamente saltata e non eseguita e soltanto la "resa" oggetto costruisce è var_dumped.
Quando si costruisce manualmente l'array/oggetto e si utilizza return, funziona come previsto.
Abbiamo scoperto che anche i salti totali generano eccezioni una volta che la resa esiste nella funzione.
Questo comportamento molto strano è realmente previsto o abbiamo trovato un bug?
Non possiamo davvero credere che questo sia voluto perché ridurrebbe drasticamente l'affidabilità delle funzioni.
Inoltre Google non ha cancellato alcuna informazione relativa a questo problema, quindi perché ho pensato di chiedere qui.
proprio a destra. Buona risposta. – lonesomeday
Lol questo è difficile. Abbiamo testato tutto ma non quello, la funzione era in uso e questo perché è sembrato essere completamente non logico, tuttavia questo è ancora strano come un preprocessore e può rendere le funzioni abbastanza inaffidabili che qualche codice venga saltato o eseguito quando non lo si desidera realmente. Comunque grazie per il tuo feedback rapido e corretto. – Steini
È documentato, a proposito: http://www.php.net/manual/en/language.generators.syntax.php#language.generators.object – lonesomeday