【发布时间】:2014-07-08 17:39:23
【问题描述】:
我和一位同事在 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 也没有提供与此问题相关的任何信息,所以我想我在这里问。
【问题讨论】: