Análise de código estático para Phpstorm e Intellij Idea.
Open IDE vá para Settings->Plugins->Marketplace para o PhpClean . Pressione o botão install .
- Inspeções
- Ações
Detecta operadores de atribuição e comparação em uma declaração.
while ( false !== $ current = ldap_next_entry ( $ con , $ current )) {
// ^^^ Hard to read this statements
yield $ this -> getSingleEntry ( $ con , $ current );
}As classes com mesmo nome em namespaces diferentes podem ser confundidas. (Desativado por padrão)
namespace App {
class User {}; // <- Class name collision with CliUser
}
namespace Cli {
class User {}; // <- Class name collision with AppUser
}Você pode depreciar algumas tags phpdoc em seu projeto.
Essa inspeção detecta o uso de variáveis globais.
echo $ _GET [ ' name ' ]; // <-- Global variable usage Métodos protegidos podem ser convertidos em privado.
final class User {
protected function name () {} // <-- Method can be private
}Os métodos devem ser fechados (faça o método ou a classe final)
class User {
public function name (): string { // <-- Method should be final
return '' ;
}
}Os métodos protegidos tornam nossas classes mais abertas. Escreva apenas métodos públicos ou públicos.
Sempre especifique o tipo de parâmetro. Esta é uma boa prática.
class User {
public function withName ( $ name ) {} // <-- Missing parameter type
}Sempre especifique o tipo de resultado da função.
function phrase () { // <-- Missing return type
return ' hi ' ;
}Verifique se a propriedade dos pais está descontinuada.
class A {
/** @deprecated */
protected $ name ;
}
class B extends A {
protected $ name ; // <-- Warn about deprecation
} As aulas marcadas com a tag @final Doc não devem ser estendidas
/**
* @final
*/
class User {};
class Admin extends User {}; // <- Prohibited extentions of @final class User. As propriedades que não são inicializadas no construtor devem ser anotadas como anuláveis.
class User {
/** @var string */ // <-- Property is not annotated correctly. Add null type
private $ name ;
public function getName () { }
public function setName ( string $ name ) { }
}As propriedades protegidas podem ser convertidas em privado.
class User {
protected $ user ; // <-- Property can be private
} Os tipos especificados no PHP podem ser omitidos nos blocos phpdoc
/**
* @return void // <-- Redundant PhpDoc tag
*/
function show ( string $ message ): void {}Detectar fundição do 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 o tipo de variável em vez do comentário do documento.
/** @var User $user */ // <-- Use assert to check variable type
assert ( $ user instanceof User); Substitua new ClassName() pelo construtor nomeado selecionado.
class Text {
public function __construct ( string $ name ){ }
public static fromName (string $ n ){}
} Invoke refactor this On Method Name fromName e todas as novas declarações com esta classe serão alteradas
new Text ( ' User ' ) // old code
Text:: fromName ( ' User ' ) // new code