Análisis de código estático para PhpStorm e Idea IntelliJ.
Abra IDE Vaya a Settings->Plugins->Marketplace Search para PhpClean . Presione el botón install .
- Inspecciones
- Acciones
Detecta a los operadores de asignación y comparación en una declaración.
while ( false !== $ current = ldap_next_entry ( $ con , $ current )) {
// ^^^ Hard to read this statements
yield $ this -> getSingleEntry ( $ con , $ current );
}Las clases con el mismo nombre en diferentes espacios de nombres se pueden confundir. (Deshabilitado de forma predeterminada)
namespace App {
class User {}; // <- Class name collision with CliUser
}
namespace Cli {
class User {}; // <- Class name collision with AppUser
}Puede desaprobar algunas etiquetas PHPDOC en su proyecto.
Esta inspección detecta los usos de las variables globales.
echo $ _GET [ ' name ' ]; // <-- Global variable usage Los métodos protegidos se pueden convertir en privado.
final class User {
protected function name () {} // <-- Method can be private
}Los métodos deben estar cerrados (hacer el método o la clase final)
class User {
public function name (): string { // <-- Method should be final
return '' ;
}
}Los métodos protegidos hacen que nuestras clases sean más abiertas. Escribe solo métodos privados o públicos.
Siempre especifique el tipo de parámetro. Esta es una buena práctica.
class User {
public function withName ( $ name ) {} // <-- Missing parameter type
}Siempre especifique el tipo de resultado de la función.
function phrase () { // <-- Missing return type
return ' hi ' ;
}Compruebe si la propiedad principal está en desuso.
class A {
/** @deprecated */
protected $ name ;
}
class B extends A {
protected $ name ; // <-- Warn about deprecation
} Las clases marcadas con la etiqueta DOC @final no deben extenderse
/**
* @final
*/
class User {};
class Admin extends User {}; // <- Prohibited extentions of @final class User. Las propiedades que no se inicializan en el constructor deben anotarse como anulables.
class User {
/** @var string */ // <-- Property is not annotated correctly. Add null type
private $ name ;
public function getName () { }
public function setName ( string $ name ) { }
}Las propiedades protegidas se pueden convertir en privado.
class User {
protected $ user ; // <-- Property can be private
} Los tipos que se especifican en el PHP se pueden omitir en los bloques PHPDOC
/**
* @return void // <-- Redundant PhpDoc tag
*/
function show ( string $ message ): void {}Detectar la fundición de tipo automático
class Hello {
public function randomize (): self { /* ... */ return $ this ; }
public function __toString () { return ' Hi ' ; }
}
echo ( new Hello ())-> randomize (); // <-- Deprecated __toString call Use afirmar para verificar el tipo de variable en lugar del comentario DOC.
/** @var User $user */ // <-- Use assert to check variable type
assert ( $ user instanceof User); Reemplace new ClassName() con el constructor nombrado seleccionado.
class Text {
public function __construct ( string $ name ){ }
public static fromName (string $ n ){}
} Invocar refactor this en el nombre del método fromName y todas las nuevas declaraciones con esta clase se cambiarán
new Text ( ' User ' ) // old code
Text:: fromName ( ' User ' ) // new code