Почему я получаю предупреждение PHPDoc в PhpStorm над этим кодом

Я не могу понять, почему PhpStorm дает мне следующее предупреждение PHPDoc comment does not match function or method signature по этому методу:

/**
 * Create a new instance of the class
 * @param string $classname Class to instantiate
 * @return object the instance
 * @throw FactoryException If the class is not instantiable
 */
private function newInstance($classname) {
    $reflectionClass = new \ReflectionClass($classname);
    if (! $reflectionClass->isInstantiable()) {
        throw new FactoryException("The class $classname is not instantiable.");
    }
    return new $classname;
}

Предупреждение не очень конкретное, я пробовал несколько вещей, таких как изменение типа возврата на "Объект", "Смешанный" или даже "int" (чтобы попробовать), но он не изменился. В чем проблема?

Ответ 1

Он должен быть @throws не @throw.

Если вы просто наберете /** по строке функции или объявления класса var, она автоматически добавит вам базовый PHPDoc. Это как я заметил разницу.

enter image description here

Ответ 2

Если этот метод реализуется/переопределяется из родительского класса, где для него существует docblock, посмотрите, соответствуют ли ваши теги для обоих. Обычно теги родителя будут наследоваться дочерним элементом, так что если родительский метод docblock уже имеет те же теги (param, return, throws), то нет необходимости перечислить их в дочернем docblock, если они им не нужны сказать что-то другое, чем родитель.

Ответ 3

Пожалуйста, обратитесь к этой ссылке https://blog.jetbrains.com/webide/2011/05/phpdoc-inspections/ Здесь указывается, что "инспекция сообщает о проблеме, если ряд параметров, описанных в комментарии PHPDoc и/или их типах, не соответствует соответствующей декларации функции или метода"