前沿拓展:
概念The heart of a generator function is the yield keyword. In its simplest form, a yield statement looks much like a return statement, except that instead of stopping execution of the function and returning, yield instead provides a value to the code looping over the generator and pauses execution of the generator function.
大致的意思是:生成器函數的核心是yield關鍵字。它最簡單的調用形式看起來像一個return申明,不同之處在于普通return會返回值并終止函數的執(zhí)行,而yield會返回一個值給循環(huán)調用此生成器的代碼并且只是暫停執(zhí)行生成器函數。(意味著交出控制權,返還給主函數,如果主函數再次執(zhí)行到這里,會繼續(xù)執(zhí)行生成器函數)。
幾個關鍵詞理解
可以在兩個層級間(主函數代碼片段、yield代碼片段)實現可以傳遞參數,也能接收結果。
function gen() {
$ret = (yield ‘yield1’);
var_dump($ret);
$ret = (yield ‘yield2’);
var_dump($ret);
}
$gen = gen();
var_dump($gen->current()); // string(6) “yield1”
var_dump($gen->send(‘ret1’)); // string(4) “ret1” (第一個 var_dump)
// string(6) “yield2” (繼續(xù)執(zhí)行到第二個 yield,吐出了返回值)
var_dump($gen->send(‘ret2’)); // string(4) “ret2” (第二個 var_dump)
// NULL (var_dump 之后沒有其他語句,所以這次 ->send() 的返回值為 null)
小編綜合來說
yield關鍵字不僅可用于迭代數據,也因為它的雙向通信,可用于協(xié)程在php語言中的實現,必須清楚的是yield是生成器里面的關鍵字,協(xié)程能夠使用生成器來實現,是因為生成器可以雙向通信,當然協(xié)程也可以使用其他的方式實現,例如swoole的協(xié)程實現方式。(關于協(xié)程暫時不多說,該篇文章主要介紹的是yield關鍵字,即生成器),關于更多的生成器示例可以google。
參考http://www.codeceo.com/article/php-principle-of-association.htmlhttps://www.php.net/manual/en/class.iterator.phphttps://www.php.net/manual/en/language.generators.syntax.phphttps://www.php.net/manual/en/class.generator.phphttps://stackoverflow.com/questions/17483806/what-does-yield-mean-in-php
拓展知識:
原創(chuàng)文章,作者:九賢生活小編,如若轉載,請注明出處:http:///6195.html