3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHPで短絡評価をうまく使って条件分岐をすっきり書く

Posted at

論理演算をしっかり理解している人にとっては当たり前の内容だと思います。

PHPで複数の条件がある条件分岐を書くとき、、、

example.php
$con_a;//条件A boolean
$con_b;//条件B boolean
if($con_a){
  if($con_b){
    //処理1
  }else{
    //処理2
  }
}else{
  //処理2
}

このように書くと処理2を二度記述することになります。
処理2が短い処理であればこれで良いですが、長くなるとさすがに見づらくなるのでどうにかしたいです。

ここで、PHPのリファレンスを読んでみます。
https://www.php.net/manual/ja/language.operators.logical.php

document.php
<?php

// --------------------
// foo() は決してコールされることはありません。これらの演算子は短絡評価を行うからです。

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

短絡評価とは、
「≪左辺≫ ≪論理演算子≫ ≪右辺≫」というような、論理演算子による式(論理演算子式)があるとする。左辺(第一引数)を評価した段階で式全体の値が定まらない場合のみ右辺(第二引数)を評価する評価法。
らしいです。(wikipediaより)

つまり、条件が2つ以上ある場合、1つ目の条件で式全体の結果が確定する場合は2つ目以降は考慮しない(する必要がない)ということです。
これを踏まえてexample.phpを書き換えると、

example.php
$con_a;//条件A boolean
$con_b;//条件B boolean
if($con_a && $con_b){
  //処理1
}else{
  //処理2
}

と書くことができます。

論理演算についてしっかり分かっていれば当然っちゃ当然ですが、条件が複雑になったりnot(!)がついたりするとややこしくなりますね。

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?