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