Analyse de code statique pour l'idée Phpstorm et IntelliJ.
Open IDE allez dans Settings->Plugins->Marketplace pour le PhpClean . Appuyez sur le bouton install .
- Inspections
- actions
Détecte les opérateurs d'affectation et de comparaison dans une déclaration.
while ( false !== $ current = ldap_next_entry ( $ con , $ current )) {
// ^^^ Hard to read this statements
yield $ this -> getSingleEntry ( $ con , $ current );
}Les classes avec le même nom dans différentes espaces de noms peuvent être confondues. (Désactivé par défaut)
namespace App {
class User {}; // <- Class name collision with CliUser
}
namespace Cli {
class User {}; // <- Class name collision with AppUser
}Vous pouvez déprécier certaines balises PHPDOC dans votre projet.
Cette inspection détecte les usages des variables globales.
echo $ _GET [ ' name ' ]; // <-- Global variable usage Les méthodes protégées peuvent être converties en privé.
final class User {
protected function name () {} // <-- Method can be private
}Les méthodes doivent être fermées (faire la méthode ou la classe finale)
class User {
public function name (): string { // <-- Method should be final
return '' ;
}
}Les méthodes protégées rendent nos classes plus ouvertes. Rédiger des méthodes privées ou publiques uniquement.
Spécifiez toujours le type de paramètre. C'est une bonne pratique.
class User {
public function withName ( $ name ) {} // <-- Missing parameter type
}Spécifiez toujours le type de résultat de la fonction.
function phrase () { // <-- Missing return type
return ' hi ' ;
}Vérifiez si la propriété parent est obsolète.
class A {
/** @deprecated */
protected $ name ;
}
class B extends A {
protected $ name ; // <-- Warn about deprecation
} Les classes marquées de la balise Doc @final ne doivent pas être étendues
/**
* @final
*/
class User {};
class Admin extends User {}; // <- Prohibited extentions of @final class User. Les propriétés qui ne sont pas initialisées dans le constructeur doivent être annotées comme nullables.
class User {
/** @var string */ // <-- Property is not annotated correctly. Add null type
private $ name ;
public function getName () { }
public function setName ( string $ name ) { }
}Les propriétés protégées peuvent être converties en privé.
class User {
protected $ user ; // <-- Property can be private
} Les types spécifiés dans le PHP peuvent être omis dans les blocs PHPDOC
/**
* @return void // <-- Redundant PhpDoc tag
*/
function show ( string $ message ): void {}Détecter la coulée de type automatique
class Hello {
public function randomize (): self { /* ... */ return $ this ; }
public function __toString () { return ' Hi ' ; }
}
echo ( new Hello ())-> randomize (); // <-- Deprecated __toString call Utilisez Assert pour vérifier le type de variable au lieu du commentaire DOC.
/** @var User $user */ // <-- Use assert to check variable type
assert ( $ user instanceof User); Remplacez new ClassName() par le constructeur nommé sélectionné.
class Text {
public function __construct ( string $ name ){ }
public static fromName (string $ n ){}
} Invoquez refactor this sur le nom de la méthode fromName et toutes les nouvelles instructions avec cette classe seront modifiées
new Text ( ' User ' ) // old code
Text:: fromName ( ' User ' ) // new code