yield 实现php
yield 关键字在 PHP 中的实现
yield 是 PHP 中用于生成器(Generator)的关键字,允许在函数中暂停执行并返回一个值,后续可以从暂停点继续执行。生成器提供了一种高效处理大数据集或延迟计算的方法,避免一次性加载所有数据到内存。
基本语法
生成器函数使用 yield 关键字返回值,而不是 return。每次调用生成器的 next() 方法时,函数会从上次暂停的位置继续执行。
function generatorExample() {
yield 'value1';
yield 'value2';
yield 'value3';
}
$generator = generatorExample();
foreach ($generator as $value) {
echo $value . "\n";
}
键值对生成
yield 不仅可以返回值,还可以返回键值对,类似于关联数组。

function keyValueGenerator() {
yield 'key1' => 'value1';
yield 'key2' => 'value2';
}
$generator = keyValueGenerator();
foreach ($generator as $key => $value) {
echo "$key: $value\n";
}
生成器委托
PHP 7.0 引入了 yield from 语法,允许生成器委托给另一个生成器或可遍历对象。
function delegateGenerator() {
yield 1;
yield from [2, 3];
yield from anotherGenerator();
}
function anotherGenerator() {
yield 4;
yield 5;
}
$generator = delegateGenerator();
foreach ($generator as $value) {
echo $value . "\n";
}
内存效率
生成器特别适合处理大数据集,因为它们不会一次性加载所有数据到内存,而是按需生成。

function largeDatasetGenerator($start, $end) {
for ($i = $start; $i <= $end; $i++) {
yield $i;
}
}
$generator = largeDatasetGenerator(1, 1000000);
foreach ($generator as $number) {
echo $number . "\n";
}
生成器与返回值
生成器函数可以使用 return 返回一个最终值,该值可以通过 getReturn() 方法获取。
function generatorWithReturn() {
yield 'value1';
yield 'value2';
return 'final value';
}
$generator = generatorWithReturn();
foreach ($generator as $value) {
echo $value . "\n";
}
echo $generator->getReturn() . "\n";
实际应用场景
生成器常用于文件处理、数据库查询结果遍历、API 分页数据获取等场景,避免内存溢出。
function readLargeFile($fileName) {
$file = fopen($fileName, 'r');
while (!feof($file)) {
yield fgets($file);
}
fclose($file);
}
$generator = readLargeFile('large_file.txt');
foreach ($generator as $line) {
echo $line;
}
生成器提供了一种灵活且高效的方式来处理需要延迟计算或大数据集的情况,是 PHP 中强大的功能之一。






