我无法理解为什么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;
}
警告不是很具体,我尝试了几种方法,例如将返回类型更改为“对象”,“混合”或甚至“整数”(尝试),但它没有改变。这有什么问题?
答案 0 :(得分:9)
应该是@throws
而不是@throw
。
如果您只是在函数或类var声明的行上键入/**
,它将自动为您插入一个基本PHPDoc。这就是我注意到差异的原因。
答案 1 :(得分:1)
如果此方法碰巧从存在docblock的父类实现/覆盖,请查看您的标记是否在两者之间匹配。通常,父级中的标记将由子级继承,这样如果父级的方法docblock已经具有相同的标记(param,return,throws),则没有必要将它们列在子级的docblock中,除非它们特别需要说一些与父母不同的东西。