LoginSignup
7
6

More than 5 years have passed since last update.

PHPのコードを書くときに気をつけたいこと

Last updated at Posted at 2016-01-16

この記事は?

PHP、個人的には「書けば動く感」とか、ゆるい感じが気に入っていたりします。
しかし仕事で書く場合は特に、他の人が見て「ある程度」分かる必要があります。
僕が数ヶ月間、✙闇✙の深いシステムのメンテナンスを担当して「ここは気をつけたい」と感じた部分をまとめたいと思います。

ループ処理

例えば、配列をforeachなんかで回したい場合...


$arr = [0, 1, 5, 0, 3];
$filtered_arr = [];
foreach ($arr as $key => $val) {
  if ( ! empty($val)) {
    // ここになにか処理を書く
    echo "{$key} is not 0 : {$val}";
    $filtered_arr[] = $val;
  } else {
    continue;
  }
}

こういうコードがあった時、個人的に気に食わない点があります。

まず、ここですね。

if ( ! empty($val)) {

if文の順番

メイン処理の分岐とcontinueするときの分岐がありますが、その順番を逆にした方が良いですね。
こんな感じに。

if (empty($val)) {
  continue;
}
// ここになにか処理を書く
echo "{$key} is not 0 : {$val}";
$filtered_arr[] = $val;

なぜかといいますと、先程の例では、メイン処理が「echoして配列に突っ込む」だけなので、まだいいのですが、
「メインの処理を把握し終わって(読み終わって)初めて、continueを発見できる」ことになるので、
処理の流れを把握しづらいです。

「if文見つけた時点でelse文見ろよ」って方もいらっしゃるかもしれないですが、そもそも上の書き方をしておけば、
continueを発見するのにそんな手間はいらないのです。

「処理の流れが把握しづらい」ってのがキモですね。

empty使わないで...

empty関数はPHPマニュアル によると変数が空であるかどうかを検査するとあります。
ただ、実際のところ、これが真になる条件は

  • null
  • false
  • 空文字
  • 要素が0個の配列
  • 変数が宣言されているが、値が設定されていない

のように、いくつかあります。
要するに、どの条件をチェックしているのか明確ではないのです。

僕は

if (strlen($str) <= 0) {}

if (count($arr) <= 0) {}

if ($intval <= 0)

のように、「どんな値になることを期待しているのか明確にする」ことを意識してに書くようにしています。

車輪の再開発しないで

そもそもですが、array_filter使えよってお話ですよ。

$arr = [0, 1, 5, 0, 3];
$filtered_arr = array_filter($arr, function($val) {
  return ($val !=== 0)
});
foreach ($filtered_arr as $val) {
  echo "{$key} is not 0 : {$val}";
}

クラス設計

/*ShopCartController.php*/
class ShopCartController {
  // カートに入ってる商品の合計を返す
  public function item_total_amount() {}
}

/*ShopOrderController.php*/
class ShopOrderController {
  // カートに入ってる商品の合計を返す
  public function get_allitem_amount() {}
}

さすがにこれは大丈夫ですよね。
「馬鹿馬鹿しい...」とお思いかもしれないですが、
実際にあった話です

おわかりかと思いますが、
notfood_1452931361140.png

ですし、書くべき場所に書きましょう。こういう処理はちゃんとまとめましょう。
あと当然ですが、まとめるべき場所はコントローラではないです。

さいごまでありがとうございます

以上です。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6