PHP迭代器学习
yield关键字
输出结果:10 40 90 160 250 360 490 640 810 1000
生成器的方法
current()
返回当前产生的值,即是yield返回给生成器的值key()
返回当前产生的键,当yield返回的不是键值对的时候,默认使用索引键next()
生成器继续执行,通过调用生成器的next()
来继续执行被yield阻塞的后面的代码,没有返回值rewind()
重置迭代器,如果迭代已经开始,调用该方法会抛出一个异常,每次调用生成器函数生成生成器的时候会自动调用(生成迭代对象的时候已经隐含地执行了rewind操作)一次rewind()
,没有返回值valid()
检查迭代器是否被关闭,即迭代是否已经结束,返回true/falsesend()
向生成器中传入一个值,并将这个值传递给当前yield,替换整个yield表达式,然后继续执行生成器(无须显式调用next()
触发程序继续执行),返回下一个yield的返回值。
说明
如果你调用->rewind(), 代码就会运行到控制流第一次出现yield的地方. 而函数内传递给yield语句的返回值可以通过$range->current()获取.
为了继续执行生成器中yield后的代码, 你就需要调用next()方法. 这将再次启动生成器, 直到下一次yield语句出现. 因此,连续调用next()和current()方法, 你就能从生成器里获得所有的值, 直到再没有yield语句出现.
yield替换
- yield两边括号在send时参数替换
- yield表达式两边的括号在PHP7以前不是可选的, 也就是说在PHP5.5和PHP5.6中圆括号是必须的.
任务轻量级协程函数
调用: