说到php中的Generator(生成器),有人可能会想到协程,这里我们先不说php如何实现协程,我们探究下Generator的执行过程。
Generator是通过yield实现,yield 关键字是php5.5版本推出的一个特性。 首先,看下面的代码:
function gen(){
while(true){
yield "gen\n";
}
}
$gen = gen();
echo "Generator";
如果没有了解过yield的话,你会认为上面代码执行的结果是:死循环。但实际上,它会echo出Generator。
到这里,也许你会觉得奇怪,yield怎么可以结束循环?下面就为大家说明一下:
Generator提供的方法:
Generator::current — 返回当前产生的值
Generator::key — 返回当前产生的键
Generator::next — 生成器继续执行
Generator::rewind — 重置迭代器
Generator::send — 向生成器中传入一个值
Generator::throw — 向生成器中抛入一个异常
Generator::valid — 检查迭代器是否被关闭
Generator::__wakeup — 序列化回调
生成器提供了一种更容易的方法来实现简单的对象迭代(迭代器),相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。
大家看下这个列子