【问题标题】:Why does php return an empty Generator if function contains both return and yield?如果函数同时包含return和yield,为什么php会返回一个空的Generator?
【发布时间】:2020-06-21 19:00:24
【问题描述】:
// Returns empty generator as expected.
function yieldOnly(): Generator
{
    yield;
}

// Throws TypeError as expected.
function returnOnly(): Generator
{
    return;
}

// Returns empty generator???
function returnAndYield(): Generator
{
    return;
    yield;
}

returnAndYield() 的返回值是一个空的Generator,虽然我期待它会抛出一个TypeError。这是预期的行为吗?我在任何地方都找不到它的文档,我想知道这是否可能是一个应该报告的错误。

【问题讨论】:

    标签: php generator typeerror yield type-hinting


    【解决方案1】:

    关于generator syntax 的手册说如下:

    任何包含yield 的函数都是生成器函数。

    因此,通过在其中包含 yield 关键字会产生生成器函数。使用return 关键字,您将退出该函数,该函数用于构建生成器函数。在这种情况下,它只是空的,因为在 return 语句之前没有 yield 行。当您使用以下源代码时:

    function returnAndYield(): Generator
    {
        yield 1;
        yield 2;
        return;
        yield 3;
        yield 4;
    }
    
    $result = returnAndYield();
    echo implode(',', iterator_to_array($result));
    

    你会得到以下输出:

    1,2
    

    34 不在生成器中,因为函数在这些 yield 语句之前退出。

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 2016-03-24
      • 2017-11-26
      • 2020-08-22
      • 2016-09-08
      • 2012-03-26
      • 1970-01-01
      • 2015-01-19
      相关资源
      最近更新 更多