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