前沿拓展:
概念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.
大致的意思是:生成器函數(shù)的核心是yield關(guān)鍵字。它最簡單的調(diào)用形式看起來像一個(gè)return申明,不同之處在于普通return會(huì)返回值并終止函數(shù)的執(zhí)行,而yield會(huì)返回一個(gè)值給循環(huán)調(diào)用此生成器的代碼并且只是暫停執(zhí)行生成器函數(shù)。(意味著交出控制權(quán),返還給主函數(shù),如果主函數(shù)再次執(zhí)行到這里,會(huì)繼續(xù)執(zhí)行生成器函數(shù))。
幾個(gè)關(guān)鍵詞理解
可以在兩個(gè)層級(jí)間(主函數(shù)代碼片段、yield代碼片段)實(shí)現(xiàn)可以傳遞參數(shù),也能接收結(jié)果。
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” (第一個(gè) var_dump)
// string(6) “yield2” (繼續(xù)執(zhí)行到第二個(gè) yield,吐出了返回值)
var_dump($gen->send(‘ret2’)); // string(4) “ret2” (第二個(gè) var_dump)
// NULL (var_dump 之后沒有其他語句,所以這次 ->send() 的返回值為 null)
小編綜合來說
yield關(guān)鍵字不僅可用于迭代數(shù)據(jù),也因?yàn)樗碾p向通信,可用于協(xié)程在php語言中的實(shí)現(xiàn),必須清楚的是yield是生成器里面的關(guān)鍵字,協(xié)程能夠使用生成器來實(shí)現(xiàn),是因?yàn)樯善骺梢噪p向通信,當(dāng)然協(xié)程也可以使用其他的方式實(shí)現(xiàn),例如swoole的協(xié)程實(shí)現(xiàn)方式。(關(guān)于協(xié)程暫時(shí)不多說,該篇文章主要介紹的是yield關(guān)鍵字,即生成器),關(guān)于更多的生成器示例可以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
拓展知識(shí):
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請注明出處:http://xiesong.cn/6195.html