参考文档:https://blog.51cto.com/chinalx1/2089327

1. 简单说明

1)调用生成器函数时会返回一个内部的 Generator 类的对象。 该对象实现了 Iterator 接口,基本上和仅向前的迭代器一样, 它提供的方法可以操控生成器的状态,包括发送值、返回值。

2)生成器函数看起来像普通函数——不同的是普通函数返回一个值,而生成器可以 yield 生成多个想要的值。 任何包含 yield 的函数都是一个生成器函数。
当一个生成器被调用的时候,它返回一个可以被遍历的对象.当你遍历这个对象的时候(例如通过一个foreach循环),PHP 将会在每次需要值的时候调用对象的遍历方法,并在产生一个值之后保存生成器的状态,这样它就可以在需要产生下一个值的时候恢复调用状态。
一旦不再需要产生更多的值,生成器可以简单退出,而调用生成器的代码还可以继续执行,就像一个数组已经被遍历完了。

注意: 生成器能够返回多个值,通过 Generator::getReturn() 可以获取到。


2. yield 关键字

2.1 获取 Generator

**

  • PHP中,如果想要获取一个 Generator 对象,那么至少需要两步
    • 使用函数
    • 在函数中使用 yiled 关键字
  • 无法通过 new 关键字来获取 生成器对象