Generators
- 生成器提供了一种容易的方法来实现简单的迭代器
- 生成器允许您编写使用foreach的代码迭代一组数据,而不需要在内存中构建数组
- 生成器可以根据需要 yield多次,以便生成需要迭代的值
- 当一个生成器被调用的时候,它返回一个可以被遍历的对象
- 当你遍历这个对象的时候(例如通过一个[foreach]循环),PHP 将会在每次需要值的时候调用生成器函数,并在产生一个值之后保存生成器的状态,这样它就可以在需要产生下一个值的时候恢复调用状态
- 一个生成器不可以返回值: 这样做会产生一个编译错误。然而return空是一个有效的语法并且它将会终止生成器继续执行(例外getReturn)
- If the generator is not yet at a yield statement (i.e. was just created and not yet used as an iterator), then any call to rewind, valid, current, key, next or send will resume the generator until the next yield statement is hit.
yield
- 生成器函数的核心是yield关键字
- yield会返回一个值给循环调用此生成器的代码并且暂停执行生成器函数
- 在内部会为生成的值配对连续的整型索引,就像一个非关联的数组
- 可以在生成值的时候指定键名, 类似关联键值对数组
- Yield可以在没有参数传入的情况下被调用来生成一个 NULL值并配对一个自动的键名
- yield from关键字允许从另外一个生成器yield值
send()
- send方法向生成器中传入一个值,并且当做yield表达式的结果,然后继续执行生成器
- 如果当这个方法被调用时,生成器不在yield表达式,那么在传入值之前,它会先运行到第一个yield表达式
throw()
- throw方法向生成器中抛入一个异常,并且恢复生成器的执行
- 如果在调用throw方法时生成器已经关闭,则会在调用者的上下文中抛出该异常
rewind()
- rewind方法重置迭代器
current()
- current方法返回当前产生的值
key()
- key方法返回当前产生的键
next()
- next方法恢复生成器的执行
getReturn()
- getReturn方法获取生成器的返回值
valid()
- valid方法检查生成器是否被关闭
__wakeup()
- __wakeup方法序列化回调
- 抛出一个异常以表示生成器不能被序列化
网友评论