【发布时间】:2019-03-30 09:54:02
【问题描述】:
我使用 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
知道为什么会这样吗?
编辑:我知道,收益不像回报。这是关于回声行为 - 因此我创建了输出示例。
【问题讨论】:
-
你的回声不应该在
else部分吗?现在您将收到数组中每个键的 missing key 消息 -
"在其最简单的形式中,yield 语句看起来很像 return 语句,只是它不是停止函数的执行并返回,而是为在生成器上循环的代码提供一个值,并且 暂停生成器函数的执行”
-
如果您希望它仅在密钥不存在时回显,那么您需要一个
else条件。 -
查看编辑部分...回声应该在生成器的输出之前不与它混合...问题更多是关于:为什么生成器中有回声,并且只会循环生成器时输出