phpstormおよびIntellijのアイデアの静的コード分析。
IDEを開くSettings->Plugins->Marketplace [ PhpCleanのマーケットプレイス検索。 installボタンを押します。
- 検査
- アクション
1つのステートメントで割り当ておよび比較演算子を検出します。
while ( false !== $ current = ldap_next_entry ( $ con , $ current )) {
// ^^^ Hard to read this statements
yield $ this -> getSingleEntry ( $ con , $ current );
}異なる名前空間に同じ名前のクラスを混乱させることができます。 (デフォルトで無効)
namespace App {
class User {}; // <- Class name collision with CliUser
}
namespace Cli {
class User {}; // <- Class name collision with AppUser
}プロジェクトでいくつかのphpdocタグを非難することができます。
この検査では、グローバル変数の使用法が検出されます。
echo $ _GET [ ' name ' ]; // <-- Global variable usage 保護された方法はプライベートに変換できます。
final class User {
protected function name () {} // <-- Method can be private
}方法は閉じる必要があります(メソッドまたはクラスの最終を作成)
class User {
public function name (): string { // <-- Method should be final
return '' ;
}
}保護された方法により、クラスがよりオープンになります。プライベートまたはパブリックの方法のみを書きます。
常にパラメータータイプを指定します。これは良い習慣です。
class User {
public function withName ( $ name ) {} // <-- Missing parameter type
}関数の結果タイプを常に指定してください。
function phrase () { // <-- Missing return type
return ' hi ' ;
}親プロパティが非推奨かどうかを確認してください。
class A {
/** @deprecated */
protected $ name ;
}
class B extends A {
protected $ name ; // <-- Warn about deprecation
} @final docタグでマークされたクラスは拡張すべきではありません
/**
* @final
*/
class User {};
class Admin extends User {}; // <- Prohibited extentions of @final class User. コンストラクターで初期化されていないプロパティは、Nullableとして注釈を付ける必要があります。
class User {
/** @var string */ // <-- Property is not annotated correctly. Add null type
private $ name ;
public function getName () { }
public function setName ( string $ name ) { }
}保護されたプロパティはプライベートに変換できます。
class User {
protected $ user ; // <-- Property can be private
} PHPで指定されているタイプは、PHPDOCブロックで省略できます
/**
* @return void // <-- Redundant PhpDoc tag
*/
function show ( string $ message ): void {}自動型キャストを検出します
class Hello {
public function randomize (): self { /* ... */ return $ this ; }
public function __toString () { return ' Hi ' ; }
}
echo ( new Hello ())-> randomize (); // <-- Deprecated __toString call Assertを使用して、Doc Commentの代わりに可変タイプを確認します。
/** @var User $user */ // <-- Use assert to check variable type
assert ( $ user instanceof User); new ClassName()を選択した名前のコンストラクターに置き換えます。
class Text {
public function __construct ( string $ name ){ }
public static fromName (string $ n ){}
} Invoke refactor this on methodname fromNameとこのクラスのすべての新しいステートメントが変更されます
new Text ( ' User ' ) // old code
Text:: fromName ( ' User ' ) // new code