Почему я получаю предупреждение PHPDoc в PhpStorm по этому коду - PullRequest
12 голосов
/ 22 марта 2012

Я не могу понять, почему 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;
}

Предупреждение не очень конкретное, я пробовал несколько вещей, таких как изменение типа возвращаемого значения на «Object», «mixed» или даже «int» (чтобы попробовать), но оно не изменилось. В чем здесь проблема?

Ответы [ 3 ]

9 голосов
/ 22 марта 2012

Это должно быть @throws, а не @throw.

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

enter image description here

1 голос
/ 30 июня 2016

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

1 голос
/ 22 марта 2012

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

...