Yield 关键字
yield
语句类似于 return 语句,除了不是停止执行函数并返回,而是返回一个 Generator 对象并暂停执行生成器函数。
以下是作为生成器编写的范围函数的示例:
function gen_one_to_three() {
for ($i = 1; $i <= 3; $i++) {
// Note that $i is preserved between yields.
yield $i;
}
}
你可以看到这个函数通过检查 var_dump
的输出返回一个 Generator 对象:
var_dump(gen_one_to_three())
# Outputs:
class Generator (0) {
}
产生价值
该发电机对象随后可以像阵列遍历。
foreach (gen_one_to_three() as $value) {
echo "$value\n";
}
以上示例将输出:
1
2
3
用键产生值
除了产生值之外,你还可以产生键/值对。
function gen_one_to_three() {
$keys = ["first", "second", "third"];
for ($i = 1; $i <= 3; $i++) {
// Note that $i is preserved between yields.
yield $keys[$i - 1] => $i;
}
}
foreach (gen_one_to_three() as $key => $value) {
echo "$key: $value\n";
}
以上示例将输出:
first: 1
second: 2
third: 3