2012-03-22 13 views
11

no puedo entender por qué PhpStorm me da la siguiente advertencia PHPDoc comment does not match function or method signature sobre este método:¿Por qué recibo una advertencia PHPDoc en PhpStorm sobre el código

/** 
* 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; 
} 

La advertencia no es muy específico, no tengo intenté varias cosas como cambiar el tipo de devolución a "Objeto", "mezclar" o incluso "int" (intentar) pero no cambió. Cuál es el problema aquí ?

Respuesta

7

Debe ser @throws no .

Si simplemente escribe /** sobre la línea de una declaración de función o clase var, insertará automáticamente una base PHPDoc por usted. Así es como noté la diferencia.

enter image description here

+1

Intenté '@ throws', pero la advertencia todavía está allí (hice lo mismo que cuando escribí'/​​** 'pero incluso el docblock generado automáticamente tenía la advertencia). En realidad, tengo una versión beta de PhpStorm 4.0, ¿tal vez solo sea un error? –

+0

Funky, sí, estoy usando 4.0 también. – MetalFrog

+1

@Matthieu 1) Definitivamente debe ser ** throws ** 2) Hay algunos problemas con la versión actual de EAP v4 (116.101) en este sentido (estoy teniendo el mismo). Según lo que veo (basado en sus comentarios), esta función está en la clase que extiende otra clase o implementa la interfaz y esta función anula una en la clase/interfaz principal. Si es así, compare los bloques de PHPDoc para ellos, incluso si 1 carácter es diferente (por ejemplo, "Crear una nueva instancia ..." frente a "Crear nueva instancia ...") PhpStorm informará sobre dicho error. – LazyOne

1

Si ocurre este método para implementar/anulación de una clase padre, donde existe un bloque de documentación para ello, ver si su partido etiquetas través de ambos. Normalmente, el niño heredará las etiquetas en el padre, de modo que si el método docblock del padre ya tiene esas mismas etiquetas (param, return, throws), entonces no es necesario enumerarlas en el docblock del niño, a menos que lo necesiten específicamente. decir algo diferente al de los padres.

+1

Eso podría ser, pero es un método privado;), no anula aquí –

1

Por favor refiérase a este enlace https://blog.jetbrains.com/webide/2011/05/phpdoc-inspections/ Se menciona allí que "La inspección informa de un problema si un número de parámetros que se describen en el comentario PHPDoc y/o sus tipos no coinciden con una función o método correspondiente declaración"

Cuestiones relacionadas