[PHP/Laravel] コードをシンプルに記述するための方法まとめ5選

PHP/Laravelの開発時のコード記述において、よりシンプルに記載することで、コード量が少なくなり、保守性が高まります。

javascriptなどでも同様の投稿をしましたが、今回はPHP/Laravelでのコードの単純化について5つまとめておきたいと思います。

シンプルなコード記述方法まとめ5選

if/else文のシンプル化

よく利用するif/else分ですが、条件の簡略化によりシンプルに作成することができます。

// NG
public function isCompleted() {
    if($this->completed === 1) {
      return true;
    } else {
      return false;
    }
}

// OK ①
public function isCompleted(){
    return ($this->completed === 1);
}

// OK ②
public function isCompleted(){
    return ($this->completed === 1) ? true : false;
}

プライマリキーを得るためにplunkの代わりにmodelKeysを利用する

プライマリキーをモデルを利用して取得する場合の最も親しまれている方法は「plunk関数」だと思います。
plunk関数は特定のフィールドを指定して取得することができますが、取得したい情報がプライマリキーの場合はパフォーマンスの観点からmodelKeysをつかうと良いでしょう。

// NG
$user =~ User::find($id);
$details = $user->details()->plunk('id', 'descKey');

// OK
$user =~ User::find($id);
$details = $user->details()->modelKeys();

配列操作ではLaravel Coolectionsを利用する

Laravelで用意されている、collectメソッドを利用して配列データをリスト形式で格納することができます。
collectすることで、sortメソッドなど様々なメソッドを利用することができるようになります。
下記では配列の末尾に要素を追加する方法です。

// NG
$arr = [1, 2, 3, 4];
$addVal = [5];
array_push($arr, $addVal);

// OK
$collection = collect([1,2,3,4]);
$collection->push(5);

モデルのインスタンスの存在確認にはcountではなくexistを使う

DBデータなどのオブジェクトデータに対して、データが存在しているかどうかのチェックは必ず行うと思いますが、countを利用して 0だった場合は存在しない、1以上の場合は存在するといったチェックではなく、単にexist関数を利用して存在チェックをすれば良いです。

// NG
User::where('id', $id)->count() > 0;
User::where('id', $id)->count() === 0;

// OK
User::where('id', $id)->exists();
User::where('id', $id)->doesNotExist();

無駄に変数を作成しない

変数を作成しすぎることで、どの変数のどのようなデータが入っているのか保守性が低くなるケースがあります。
特に、ローカル変数であればなんとかなりますが、グローバル変数だと、その部分が顕著に出てしまいます。
下記では、$jsonDataという変数を作成せずシンプルに返すようにしています。

// NG
public function sample(){
    $jsonData = ['id' => 1, 'name' => "sample"];
    $this->data = json_encode($jsonData);
    return $this->data
}

// OK
public function sample(){
    return json_encode(['id' => 1, 'name' => "sample"]);
}

最後に

コード記述において、シンプル化はとても重要な課題の一つです。ただシンプルにすれば良いというわけではありません。シンプルにしすぎることで保守性が低くなるケースも当然あります。

いろいろ考慮して開発に望んでください。

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