1. メソッド名の動的生成はダメ絶対
例)
$methodName = 'aiueo';
if ($parameter == 1) {
$methodName .= 'Ver1';
} else {
$methodName .= 'Ver2';
}
$methodName();
理由) 影響範囲調査するときなどでgrepでひっかからずに漏れる。そして致命的エラーにつながる。
=====================================
2. 数値や文字列のユニークなキーなどはなるべく、素のままで扱い、表示用装飾は最後にする。ビジネスロジックのメソッド内での装飾はなるべく避ける。
例)
// 誤ったバージョン✖
function getShopStopDays() {
$stopDays = ;
...なんやかんやで店の定休日などのロジックで求めるときに、'月'とか'日'とかをつけてしまう…
$stopDays = $year.'年'.' '.$month.'月.$day.'日';
...なんやかんや
return $stopDays;
}
// 正しいバージョン〇
function getShopStopDays() {
$stopDays = ;
...なんやかんやで店の定休日などのロジックで求めるときに、'月'とか'日'とかつけない
$stopDays = ['year'=>$year, 'month'=>$month, 'day' => $day];
...なんやかんや
return $stopDays;
}
=====================================
3. 概念が同じものには同じ英単語をなるべく使う(理想論)
これはさすがに完璧には無理だと思いますが、あくまで理想として…。
// 誤ったバージョン✖
class Hoge {
public function sono1() {
$books = '予約の意味';
}
public function sono1() {
$reserves = '予約の意味';
}
}
// 正しいバージョン〇
class Hoge {
public function sono1() {
$reserves = '予約の意味';
}
public function sono1() {
$reserves = '予約の意味';
}
}
=====================================
3. ループは複数回してもいいので、処理の単位でまとめる
// 誤ったバージョン✖
function fooNG($dataList) { foreach ($dataList as $key => $data) { // 変な文字列だったら空にする if ($data['name'] == '--') { $data['name'] = ''; } // 他の処理 if ($key == 1) { keyOneMethod($data); } elseif ($key == 2) { keyTwoMethod($data); } } }
//正しいバージョン
function fooOK($dataList) { // 変な文字列だったら空にする foreach ($dataList as $key => $data) { if ($data['name'] == '--') { $data['name'] = ''; } $dataList[$key] = $data; } // 他の処理 foreach ($dataList as $key => $data) { if ($key == 1) { keyOneMethod($data); } elseif ($key == 2) { keyTwoMethod($data); } } }
=====================================
4. (基本中の基本だが)1つの変数には、1つの意味を込める。1つの変数にさまざまな意味を込めない。
誤ったバージョン
function getPriceNG() { $price = 0; if (...) { $price = false; // "料金"という変数にフラグ…だと?!! } return $price; } $price = $this->getPriceNG(); if ($price === false) { // なんやかんや特別な処理 } else { // 通常の処理 }
正しいバージョン
// もっというなら、フラグを算出するメソッドを別にすべきだが… function getPriceOK() { $price = 0; $isFooFlag = true; // 実際の現場ではちゃんとした名前にします if (...) { $isFooFlag = false; } return [$price , $isFooFlag]; } list($price, $isFooFlag) = $this->getPriceOK(); if ($isFooFlag === false) { // なんやかんや特別な処理 } else { // 通常の処理 }