controversial
This ruleset contains a collection of controversial rules.意見の別れるルール集。
キャメルケース警告は、クラス名、メンバー変数名、メソッド名、引数名、ローカル変数名の第5弾まであります。
議論に巻き込まれないようにしましょう。

キャメルケースって単語が4つも並ぶと単語の区切りがわかりにくいよね

そう思わない人もいるから、意見が別れるのよ。
Superglobals
メッセージ例
xx accesses the super-global variable yy.Code language: plaintext (plaintext)
抑止方法
/**
*
* @SuppressWarnings(PHPMD.Superglobals)
*/Code language: PHP (php)
説明
Accessing a super-global variable directly is considered a bad practice.
These variables should be encapsulated in objects that are provided by a framework, for instance.
スーパーグローバル変数($_GET、$_POSTなど)に直接アクセスすることは、バッドプロクティス。
(フレームワークがスーパーグローバル変数をカプセル化しているように)スーパーグローバル変数はカプセル化したほうがいいよ。
コード例
class Foo
{
public function bar()
{
$name = $_POST['foo'];
}
}Code language: PHP (php)
解説
PHPが用意してくれるスーパーグローバル変数も「グローバル変数」。グローバル変数に依存しないように、ということでしょうか。
$_POSTなどに直接アクセスしていると、テストケースを作るとき、少しだけ面倒です。
テストケースでは、$_POST['foo']に値を設定して、bar()メソッドを呼び出します。他のテストケースに影響がないように、$_POST['foo']を元の状態に戻さなければなりません。
class FooTest extends TestCase
{
private postvarsBackup();
/**
* @before
*/
public function setUp()
{
$this>postvarsBackup = $_POST;
}
/**
* @after
*/
public function tearDown()
{
$_POST = $this>postvarsBackup
}
/**
* @test
*/
public function bar() {
$_POST['foo'] = 'test value';
$this->bar();
}
}Code language: PHP (php)
そこで、メソッドの引数(またはコンスタクタで)で$_POSTを渡すようにします。テストケースでは$_POSTではなく、ローカル変数$varsに必要なデータを設定することで、barメソッドを呼び出せるようになりました。
class Foo
{
public function bar($postVars)
{
$name = $postVars['foo'];
}
}
class FooTest extends TestCase
{
/**
* @test
*/
public function bar()
{
$vars = [
'foo' => 'test value';
];
$this->bar($vars);
}
}Code language: PHP (php)
PHPのキーバリュー型配列は、キーがないとUndefined Index Noticeが発生します。そのため、isset()やarray_key_exists()でキーの存在確認が必要で、コードが煩雑になりがちです。
1行だけなら気になりませんが、このような行が10行も20行も並んでいるのを見たことがありますよね。
class Foo
{
public function bar()
{
$name = isset($_POST['foo']) ? $_POST['foo'] : '';
}
}Code language: PHP (php)
そこで、$_POSTをくるむMyMapクラスを用意して、MyMapを介してアクセスするようにします。
class MyMap
{
public function get($key, $defaultValue = '')
{
}
public function exists($key)
{
}
public function set($key, $value)
{
}
}
class Foo {
public function bar($myMapPost)
{
$name = $this->myMapPost->get('foo');
}
}
$foo->bar(new MyMap($_POST));Code language: PHP (php)
しかし、このMyMapクラス、undefined index防止しか付加価値を追加していません。それだけのために、existsメソッドやsetメソッドを用意したり、MyMapクラスに依存関係ができてしまうのは、ちょっとムダな感じがします。
$_POSTをくるむクラスを作るなら、汎用的なクラスではなく、そのページごとに固有の入力パラメータを集約した、例えばMyFormInputParamsクラスを作っておき、その後のissetチェックを不要にしたほうがいいかもしれません。
また、undefined index防止だけなら、ヘルパー関数を用意するだけでもいいでしょう。
class ArrayHelper
{
public static function get($vars, $key, $defaultValue = '')
{
return isset($vars[$key]) ? $vars[$key] : $defaultValue;
}
}
class Foo
{
public function bar($postVars)
{
$name = ArrayHelper::get($postVars, 'foo');
}
}
$foo->bar(new MyMap($_POST));Code language: PHP (php)

面倒だから、直接$_POSTアクセスしちゃおうっと?
リファクタ例
CamelCaseClassName
メッセージ例
The class xx is not named in CamelCase.Code language: plaintext (plaintext)
抑止方法
/**
*
* @SuppressWarnings(PHPMD.CamelCaseClassName)
*/Code language: PHP (php)
説明
It is considered best practice to use the CamelCase notation to name classes.クラス名がパスカルケースになっていないよ(1文字目が大文字のキャメルケース)
解説
キャメルケース警告の第1弾。
CamelCasePropertyName
メッセージ例
The property xx is not named in camelCase.Code language: plaintext (plaintext)
抑止方法
/**
*
* @SuppressWarnings(PHPMD.CamelCasePropertyName)
*/Code language: PHP (php)
説明
It is considered best practice to use the camelCase notation to name attributes.
メンバー変数がキャメルケースになっていないよ(1文字目は小文字)
解説
キャメルケース警告の第2弾
CamelCaseMethodName
メッセージ例
The method xx is not named in camelCase.Code language: plaintext (plaintext)
抑止方法
/**
*
* @SuppressWarnings(PHPMD.CamelCaseMethodName)
*/Code language: PHP (php)
説明
It is considered best practice to use the camelCase notation to name methods.
メソッド名がキャメルケースになっていないよ(1文字目は小文字)
解説
キャメルケース警告の第3弾
CamelCaseParameterName
メッセージ例
The parameter xx is not named in camelCase.Code language: plaintext (plaintext)
抑止方法
/**
*
* @SuppressWarnings(PHPMD.CamelCaseParameterName)
*/Code language: PHP (php)
説明
It is considered best practice to use the camelCase notation to name parameters.
引数名がキャメルケースになっていないよ(1文字目は小文字)
解説
キャメルケース警告の第4弾
CamelCaseVariableName
メッセージ例
The variable xx is not named in camelCase.Code language: plaintext (plaintext)
抑止方法
/**
*
* @SuppressWarnings(PHPMD.CamelCaseVariableName)
*/Code language: PHP (php)
説明
It is considered best practice to use the camelCase notation to name variables.
ローカル変数名がキャメルケースになっていないよ(1文字目は小文字)
解説
キャメルケース警告の第5弾

