生成器是PHP中用于遍历大量数据的特殊函数,通过yield关键字实现暂停和恢复执行,每次返回一个值而不占用大量内存。1. 普通函数执行后返回值并结束,生成器则可在yield处暂停并后续继续。2. 使用next()或foreach迭代时,生成器运行到下一个yield并返回对应值。3. 如countUpTo($max)示例所示,for循环中yield逐个产出数值。4. 可以使用键值对形式yield 'key' => 'value',如fruits()函数产出水果名称与颜色映射。5. 生成器一旦执行完毕便不可重用,需重新调用函数创建新实例。6. 适用于处理大文件、数据库记录流或协程逻辑等场景,提升性能与代码可读性。

生成器的基本用法
使用 yield 关键字来定义生成器。每次调用生成器的 next() 方法或在循环中迭代时,函数会运行到下一个 yield 语句并返回值。例如:
function countUpTo($max) {
for ($i = 1; $i <= $max; $i++) {
yield $i;
}
}
foreach (countUpTo(5) as $num) {
echo $num . " ";
}
// 输出: 1 2 3 4 5
生成器的优势
生成器特别适合处理大数据集或无限序列,因为它按需生成值,不占用大量内存。- 节省内存:只在需要时生成值,避免创建大数组
- 可读性强:代码逻辑清晰,像普通循环一样编写
- 支持中断执行:函数状态会被自动保存,下次调用继续执行
可以返回键值对
yield 还可以指定键和值,类似关联数组:function fruits() {
yield 'apple' => 'red';
yield 'banana' => 'yellow';
yield 'grape' => 'purple';
}
foreach (fruits() as $name => $color) {
echo "$name is $color\n";
}











