我使用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
任何想法为什么会发生这种情况?
编辑:我知道,收益率不像回报率。这是关于回声行为的-因此我创建了输出示例。
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"
对生成器的第四个调用仍将是echo
:
missing key3
但是,到达$this->keys
的末尾,不再产生任何值,生成器达到了最后一个值。