PHP产量在函数中回显

问题描述 投票:1回答:1

我使用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

任何想法为什么会发生这种情况?

编辑:我知道,收益率不像回报率。这是关于回声行为的-因此我创建了输出示例。

php yield php-7.1
1个回答
0
投票
在第一次调用时,产生了key 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"

对生成器的第四个调用仍将是echo

missing key3

但是,到达$this->keys的末尾,不再产生任何值,生成器达到了最后一个值。
© www.soinside.com 2019 - 2024. All rights reserved.