Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

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

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

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(!)がついたりするとややこしくなりますね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?