PHP 产量抑制功能中的回声



我使用 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末尾,不再产生任何值,生成器达到其最后一个值。

最新更新