PHP7.1+支持yield from实现生成器委托,可委托生成器、数组、Traversable对象,但不可委托标量;需确保版本≥7.1,否则报解析错误。

在PHP7.1中使用生成器委托(Generator Delegation)实现嵌套迭代时,需通过yield from语法将子生成器的值逐个产出,避免手动遍历和yield重复写入。
确认PHP版本并启用生成器委托
运行php -v命令检查当前环境,【必须为PHP7.1或更高版本】,低于此版本会直接报Parse error: syntax error,无法解析yield from语句。
无需额外配置,只要版本达标,yield from即开即用。
基础语法:用yield from委托另一个生成器
方法一:委托简单生成器
定义一个返回数字1~3的生成器函数numbers(),再在主生成器中用yield from numbers()将其所有值原样产出。
方法二:委托匿名生成器
直接在yield from后接function() { yield 1; yield 2; }(),注意括号必须紧贴,否则会因缺少可迭代对象而报Fatal error。
委托数组或Traversable对象
第一步:创建含嵌套数据的数组
$data = [['a', 'b'], [1, 2, 3]];
第二步:在生成器中逐层yield from
function nestedYield($arr) { foreach ($arr as $sub) { yield from $sub; } }
第三步:调用并遍历
foreach (nestedYield($data) as $item) { echo $item . "\n"; } // 输出a、b、1、2、3
注意:yield from后面不能跟标量值(如字符串"hello"),否则抛出Exception:Cannot use string as iterator。
委托多个生成器并混用普通yield
function mixedYield() { yield 'start'; yield from range(1, 3); yield 'end'; }
这一步操作起来很简单,直接遍历mixedYield()即可得到start→1→2→3→end五项输出。
yield from与普通yield可任意穿插,但【yield from必须位于生成器函数体内,不可出现在闭包外或非生成器函数中】。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











