我使用 PHP 7.1.15。 使用以下函数,我尝试输出缺少条目或稍后生成生成器
public function myFunc($doc)
{
$trans = $this->getTranslations($doc);
foreach ($this->keys as $key) {
if (array_key_exists($key, $trans)) {
yield $trans[$key];
}
echo "missing ".$key."<br>";
}
}
但就我而言,我没有得到回声——当我循环通过发生器时,回声是其中的一部分。
foreach($translation as $trans){
var_dump($trans);
}
输出如下所示
string(33) "key1 text"
missing key1
string(27) "key2 text"
missing key2
string(29) "key3 text"
missing key3
知道为什么会这样吗?
编辑:我知道,收益率不像回报。这是关于回声行为的 - 因此我创建了输出示例。
在第一次调用时,将生成键 1 元素,并且不会回显任何内容:
string(33) "key1 text"
在第二次调用(第二次迭代(中,生成器在它"暂停"的地方继续,这意味着它继续yield
之后的下一个表达式,这是echo
,在那一刻,$key
仍然是"key1",这意味着它输出:
missing key1
到达foreach
循环的末尾,$key
跳转到下一个元素,现在是"key2",并生成第二个值:$trans["key2"],var_dump()
显示:
string(27) "key2 text"
在下一次迭代中,输出将是:
missing key2
string(29) "key3 text"
对生成器的第 4 次调用仍将echo
:
missing key3
然而,到达$this->keys
末尾,不再产生任何值,生成器达到其最后一个值。