PhpStorm - проверки на значение NULL - PullRequest
3 голосов
/ 25 марта 2019

Вопрос по этому примеру:

<?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(), связанном с использованием значения Nullable в качестве аргумента метода, который не должен иметь значение NULL! Я спрашиваю об этом, потому что, когда свойство $name будет null, в моем приложении будет ошибка.

Версия с

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

тоже не работает.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

PhpStorm не очень строг при анализе кода. Например, при введении значений свойств через конструктор он не смотрит на объявленный тип свойства при автозаполнении методов и свойств, а скорее на тип, который был введен в конструктор.

Для очень строгого анализа, попробуйте PHPStan . В отличие от PhpStorm, вы можете легко добавить его в свою сборку CI. См. Итоговую ошибку для вашего примера .

0 голосов
/ 25 марта 2019

Я думаю, что проверка PhpStorm нарушена аннотациями типов переменных экземпляра.

Если я использую напрямую:

$this->setSomething(null);

Я получаю ошибку типа. Тем не менее, если я непосредственно назначаю значение NULL для $this->sth, я не получаю никакой ошибки:

$this->sth = null;

По сути, не полагайтесь на аннотации переменных типов, которые нужно правильно проверять с помощью strict_types=1

...