我使用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
知道为什么会这样吗?
编辑:我知道,这种收益率不像回报。关于回声行为-因此,我创建了输出示例。
答案 0 :(得分:0)
第一次调用时,会产生key 1元素,并且不会回显任何内容:
new Date(serialNumber * 24 * 60 * 60 * 1000 + new Date(1899, 11, 30).getTime())
在第二次调用(第二次迭代)中,生成器在“暂停”的位置继续,这意味着它将在string(33) "key1 text"
之后的下一个表达式(yield
)继续,并在此时{ {1}}仍然是“ key1”,这意味着它输出:
echo
到达$key
循环的结尾,missing key1
跳到下一个元素,现在为“ key2”,并产生第二个值:$ trans [“ key2”]和{{1 }}显示:
foreach
在下一次迭代中,输出将是:
$key
对生成器的第四次调用仍将var_dump()
:
string(27) "key2 text"
但是,到达missing key2
string(29) "key3 text"
的末尾时,不再产生任何值,生成器达到了最后一个值。