Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 他有一种奇怪的行为_Php_Object_Yield_Skip - Fatal编程技术网

Php 他有一种奇怪的行为

Php 他有一种奇怪的行为,php,object,yield,skip,Php,Object,Yield,Skip,我和一位同事在PHP版本5.5.11中使用新的关键字“yield”发现了一个非常奇怪的行为,我们想知道以下情况是否正常: 给出了以下代码: function yieldTest() { echo 'wtf1'; die('wtf2'); foreach (['foo', 'bar', 'baz'] as $each) { yield $each; } } var_dump(yieldTest()); 奇怪的是,如果函数中存在“yield”,

我和一位同事在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_转储

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

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

这种奇怪的行为真的是故意的还是我们发现了一个bug

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


谷歌也没有吐出任何与这个问题相关的信息,这也是我在这里想问的。

你的
var\u 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”


或者,如果有人对其进行注释,则会引发异常。

Lol这是一个棘手的问题。我们测试了所有的东西,但不是说,函数在使用中,这就是为什么它看起来完全不符合逻辑,然而这仍然很奇怪,它就像一个预处理器,可以使函数非常不可靠,一些代码被跳过或执行时,你真的不想要它。无论如何,感谢您的快速正确反馈。顺便说一句,记录在案: