PHP 收益关键字

示例

一条yield语句与return语句相似,只不过yield并不会停止执行函数并返回,而是返回了Generator对象并暂停了Generator函数的执行。

这是范围函数的示例,写为生成器:

function gen_one_to_three() {
    for ($i = 1; $i <= 3; $i++) {
        // 注意,$i在收益率之间保留。
        yield $i;
    }
}

您可以通过检查以下输出看到此函数返回Generator对象var_dump:

var_dump(gen_one_to_three())

# Outputs:
class Generator (0) {
}

屈服价值

然后可以像数组一样遍历Generator对象。

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++) {
        // 注意,$i在收益率之间保留。
        yield $keys[$i - 1] => $i;
    }
}

foreach (gen_one_to_three() as $key => $value) {
    echo "$key: $value\n";
}

上面的示例将输出:

first: 1
second: 2
third: 3