phpmd naming警告の解説

naming

The Naming Ruleset contains a collection of rules about names - too long, too short, and so forth.

名前に関するルールです。(長すぎる、短すぎるなど)。

LongClassName

メッセージ例

Avoid excessively long class names like xx. Keep class name length under yy.
Code language: plaintext (plaintext)

抑止方法

/** * * @SuppressWarnings(PHPMD.LongClassName) */
Code language: PHP (php)

説明

Detects when classes or interfaces are declared with excessively long names.

クラスまたはインターフェイスの名前が長すぎるよ
40文以下にしよう。

コード例

class ATooLongClassNameThatHintsAtADesignProblem { } interface ATooLongInterfaceNameThatHintsAtADesignProblem { }
Code language: PHP (php)

解説

namespaceのディレクトリに分けて、クラス名を短くしましょう。

namespaceが違って、クラス名が同じクラスを使うときは、フルパスを指定しなくちゃいけないよ、ちょー長いよ。

そうね、難しいわね

ShortClassName

メッセージ例

Avoid classes with short names like xx. Configured minimum length is yy.
Code language: plaintext (plaintext)

抑止方法

/** * * @SuppressWarnings(PHPMD.ShortClassName) */
Code language: PHP (php)

説明

Detects when classes or interfaces have a very short name.

クラスまたはインターフェイスの名前が短すぎるよ。
3文字以上にしよう。

コード例

class Fo { } interface Fo { }
Code language: PHP (php)

解説

説明のときに、クラスAとかクラスBBとかは使うけれど、実際にこんな短いクラス名を使うことはないと思います。

もし警告されるような短いクラス名を使っていたら、3文字以上にしましょう。

ShortVariable

メッセージ例

Avoid variables with short names like xx. Configured minimum length is yy.
Code language: plaintext (plaintext)

抑止方法

/** * * @SuppressWarnings(PHPMD.ShortVariable) */
Code language: PHP (php)

説明

Detects when a field, local, or parameter has a very short name.

メンバー変数、ローカル変数、または引数の名前が短すぎるよ。
3文字以上にしよう。(for文のカウンタ変数は除く)

コード例

class Something { private $q = 15; // VIOLATION - Field public function main( array $as ) { // VIOLATION - Formal $r = 20 + $this->q; // VIOLATION - Local for ($i = 0; $i < 10; $i++) { // Not a Violation (inside FOR) $r += $this->q; } } }
Code language: PHP (php)

解説

一般的に、変数のスコープの広いものは、名前を長くし、スコープの狭いものは、名前を短くします。

publicメンバー変数長い
protectedメンバー変数
privateメンバー変数
メソッドの引数(※1)
ローカル変数
forカウンタ

※1 呼び出し元で同じ名前の変数が準備してメソッドに渡すことが多いので、ローカル変数より上にしました。

ローカル変数で1文字の $x、$y、2文字の $x1、$x2 とか使っているよ

そういう場合は警告抑止してもいいわね

LongVariable

メッセージ例

Avoid excessively long variable names like xx. Keep variable name length under yy.
Code language: plaintext (plaintext)

抑止方法

/** * * @SuppressWarnings(PHPMD.LongVariable) */
Code language: PHP (php)

説明

Detects when a field, formal or local variable is declared with a long name.

フィールド、引数、またはローカル変数が長すぎるよ。
最大20文字まで。

コード例

class Something { protected $reallyLongIntName = -3; // VIOLATION - Field public static function main( array $interestingArgumentsList[] ) { // VIOLATION - Formal $otherReallyLongName = -5; // VIOLATION - Local for ($interestingIntIndex = 0; // VIOLATION - For $interestingIntIndex < 10; $interestingIntIndex++ ) { } } }
Code language: PHP (php)

解説

メンバー変数名は長くてもいいんですが、メソッドの引数やローカル変数はもっと短くしたいところです。

しかし、クラスからnewするとき、クラス名の先頭を小文字にしただけの変数名をIDEが候補として表示してくれます。自分で考えるのも面倒なので、IDE提案の変数名をそのまま使ってしまうので、最近はローカル変数も長いですよね。

いくつかの変数をメソッドに渡すだけなのに、120桁こえてしまうことあるよ

ShortMethodName

メッセージ例

Avoid using short method names like xx::yy(). The configured minimum method name length is zz.
Code language: plaintext (plaintext)

抑止方法

/** * * @SuppressWarnings(PHPMD.ShortMethodName) */
Code language: PHP (php)

説明

Detects when very short method names are used.

メソッド名が短すぎるよ。
3文字以上にしよう。

コード例

class ShortMethod { public function a( $index ) { // Violation } }
Code language: PHP (php)

解説

x()や p0()など、1文字2文字のメソッドが妥当であれば、警告を抑止しよう。

ConstructorWithNameAsEnclosingClass

メッセージ例

Classes should not have a constructor method with the same name as the class
Code language: plaintext (plaintext)

抑止方法

/** * * @SuppressWarnings(PHPMD.ConstructorWithNameAsEnclosingClass) */
Code language: PHP (php)

説明

A constructor method should not have the same name as the enclosing class, consider to use the PHP 5 __construct method.

コンストラクターメソッドは、(PHP4スタイルの)クラスと同名はだめだよ。
PHP5の__constructメソッドにしよう。

コード例

class MyClass { // this is bad because it is PHP 4 style public function MyClass() {} // this is good because it is a PHP 5 constructor public function __construct() {} }
Code language: PHP (php)

解説

PHP4形式のコンストラクタは、PHP7.0で非推奨になりました。

同じ名前のメソッドがあると、コンストラクタではなく、普通のメソッドと同じように扱われます。

混乱を防ぐために、クラス名と同じ名前のメソッドは使わないほうがいいでしょう。

コード例をphpmdにかけたけど、この警告でなかったよ(PHP7.2)

ConstantNamingConventions

メッセージ例

Constant xx should be defined in uppercase
Code language: plaintext (plaintext)

抑止方法

/** * * @SuppressWarnings(PHPMD.ConstantNamingConventions) */
Code language: PHP (php)

説明

Class/Interface constant names should always be defined in uppercase.

クラス/インターフェイスの定数名は、全て大文字(アンダーバー含む)

コード例

class Foo { const MY_NUM = 0; // ok const myTest = ""; // fail }
Code language: PHP (php)

解説

defineで定義する定数名も、同じように、全ての大文字のスネークケースにしましょう。

BooleanGetMethodName

メッセージ例

The 'xx()' method which returns a boolean should be named 'is...()' or 'has...()'
Code language: plaintext (plaintext)

抑止方法

/** * * @SuppressWarnings(PHPMD.BooleanGetMethodName) */
Code language: PHP (php)

説明

Looks for methods named 'getX()' with 'boolean' as the return type. The convention is to name these methods 'isX()' or 'hasX()'.

戻り値がbool型なのに、「getX()」という名前のメソッドがあるね。慣例では(戻り値がbool型の)メソッドには「isX()」や「hasX()」という名前をつけるよ。

コード例

class Foo { /** * @return boolean */ public function getFoo() {} // bad /** * @return bool */ public function isFoo(); // ok /** * @return boolean */ public function getFoo($bar); // ok, unless checkParameterizedMethods=true }
Code language: PHP (php)

解説

引数がない、戻り値がbool型のメソッドは、isXXX()、hasXXX() という名前をつけることが多いので、見る人も理解しやすいです。

bool型ではないのに、isXXX()、hasXXX()をつけないにしましょう。見る人はbool型を期待します。

is、hasに何か単語をつけておけば、日本人には意味は通じるよ、きっと

enabled()もよく使われるね

タイトルとURLをコピーしました