gpt4 book ai didi

PHP Yield,奇怪的行为

转载 作者:可可西里 更新时间:2023-11-01 12:34:13 26 4
gpt4 key购买 nike

我和一位同事在 PHP 版本:5.5.11 中使用新关键字“yield”发现了一个非常奇怪的行为,我们想知道以下是否正常:

给出如下代码:

function yieldTest()
{
echo 'wtf1';
die('wtf2');

foreach (['foo', 'bar', 'baz'] as $each) {
yield $each;
}
}

var_dump(yieldTest());

奇怪的是,如果函数中存在“yield”,则 echo 和 die 都将被完全跳过并且不会执行,而只有对象“yield”构建被 var_dumped。

当我们手动构建数组/对象并使用 return 时,它会按预期工作。

我们发现,一旦函数中存在 yield,它甚至会完全跳过抛出的异常。

这种非常奇怪的行为是真的有意为之还是我们发现了错误?

我们不能真的相信这是需要的,因为它会大大降低功能的可靠性。

此外,Google 也没有公布与此问题相关的任何信息,这就是我想在这里提问的原因。

最佳答案

您的var_dump 只是输出一个生成器对象。此时执行函数还没有进入。如果您继续实际使用生成器,则会执行该函数的代码:

function yieldTest() {
echo 'wtf1';
//throw Exception('test');

foreach (['foo', 'bar', 'baz'] as $each) {
yield $each;
}
}

$test = yieldTest();
foreach ($test as $k) {
var_dump($k);
}

输出

wtf1string(3) "foo" string(3) "bar" string(3) "baz"

或者如果有人评论它则引发异常。

关于PHP Yield,奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23760148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com