前沿拓展:
概念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会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。(意味着交出控制权,返还给主函数,如果主函数再次执行到这里,会继续执行生成器函数)。
几个关键词理解
可以在两个层级间(主函数代码片段、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” (继续执行到第二个 yield,吐出了返回值)
var_dump($gen->send(‘ret2’)); // string(4) “ret2” (第二个 var_dump)
// NULL (var_dump 之后没有其他语句,所以这次 ->send() 的返回值为 null)
小编综合来说
yield关键字不仅可用于迭代数据,也因为它的双向通信,可用于协程在php语言中的实现,必须清楚的是yield是生成器里面的关键字,协程能够使用生成器来实现,是因为生成器可以双向通信,当然协程也可以使用其他的方式实现,例如swoole的协程实现方式。(关于协程暂时不多说,该篇文章主要介绍的是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
拓展知识:
原创文章,作者:九贤生活小编,如若转载,请注明出处:http://www.wangguangwei.com/6195.html