为什么PhpStorm使用yield允许函数返回null返回类型?

时间:2019-03-14 09:22:30

标签: php phpstorm

我使用PhpStorm在以下函数中自动添加了返回类型:

/**
 * @return \Generator|null
 */
function yieldTest(): ?\Generator
{
    yield from [1, 2, 3];
}

我的问题:为什么在null旁边添加\Generator选项?

我看不到此方法返回null的方法,所以我想知道我是否正在以yield的方式忽略某些内容,或者这是否是PhpStorm的怪癖并且可以安全地弃用?

更新

为了澄清-我在问为什么PHPStorm生成的返回类型为?\Generator

我了解它随后将null添加到了php doc @return标记中,因为在?上。

更新2:

这是生成额外位之前测试文件的完整代码:

class yieldTestClass
{
    public function yieldTest()
    {
        yield from [1, 2, 3];
    }
}

这是从方法名称的上下文菜单中选择“声明返回类型”后的代码:

class yieldTestClass
{
    public function yieldTest(): ?\Generator
    {
        yield from [1, 2, 3];
    }
}

我不确定这是IDE中的本机功能还是来自插件,但我想如果它是插件https://plugins.jetbrains.com/plugin/7622-php-inspections-ea-extended-

尽管有同样的问题。

2 个答案:

答案 0 :(得分:2)

?的意思是“返回类型声明不是强制性的,可以从理论上省略”。如果确实返回null,则PHPStorm不会进行动态分析。

  

从PHP 7.1.0开始,可以通过添加前缀将返回值标记为可为空   带问号的类型名称()。这表示   函数返回指定的类型或NULL。

参考:http://php.net/manual/en/functions.returning-values.php

考虑代码示例:

    /**
     * @return Generator|null
     */
    function yieldTest(): ?\Generator
    {
        yield from [1, 2, 3];
    }

    /**
     * @return Generator
     */
    function yieldTest(): \Generator
    {
        yield from [1, 2, 3];
    }

答案 1 :(得分:1)

该检查和预期的修复(添加的代码)由 Php检查(EA扩展)插件提供。

请向插件作者报告:https://github.com/kalessil/phpinspectionsea/issues