PhpStorm-检查NULL值

时间:2019-03-25 13:58:13

标签: php phpstorm

有关此示例的问题:

<?php declare(strict_types=1);

class SomeTestClass
{
    /** @var string|null */
    private $name;

    /** @var string */
    private $sth;

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setSomething(string $value): void
    {
        $this->sth = $value;
    }

    public function something(): void
    {
        $this->setSomething($this->getName());
    }
}

为什么 PhpStorm 2018.3.5 没有通知我something()中与使用可空值作为不应为空的方法参数有关的错误代码?我问这个问题是因为当$name属性为null时,我的应用程序中会出现错误。

版本

public function something(): void
{
    /** @var string|null $name */
    $name = $this->getName();
    $this->setSomething($name);
}

也不起作用。

2 个答案:

答案 0 :(得分:1)

PhpStorm在分析代码时不是很严格。例如,通过构造函数注入属性值时,它不会在自动完成方法和属性时查看声明的属性类型,而是查看注入到构造函数中的类型。

要进行非常严格的分析,请尝试PHPStan。与PhpStorm不同,您可以轻松地将其添加到CI构建中。 See the resulting error for your example

答案 1 :(得分:0)

我认为PhpStorm检查被实例变量类型注释破坏了。

如果我直接使用:

$this->setSomething(null);

我收到类型错误。 但是,如果我直接将null分配给$this->sth,则完全不会出错:

$this->sth = null;

基本上,不要依靠strict_types=1来正确检查变量类型注释