三項演算子を活用する for PHP

 

たまに三項演算子は悪だと決めつけ、利用しない人がいるが、とても便利な書き方なので、この記事を読む方は是非とも利用を検討してほしい。

 

三項演算子とは...

if文を省略した書き方であり、

式 ? true処理 : false処理 ;

のように、一行にまとめることができる。

 

三項演算子

例文

if($num % 2  == 0){

  $type = '偶数';

}else{

  $type = '奇数';

}

 

というようなif文があったとする。

これを三項演算子でまとめると、

$type = $num % 2 == 0 ? '偶数' : '奇数';

 

と書くことができる。

どちらも同じ意味であるため、無理に使用する必要はないが、後者の方が綺麗なのは明らかである。

また、普段見慣れない人からすれば、少しわかりにくいが、可読性も後者のほうが良いと思う。

 

三項演算子にはもっと便利な書き方も存在する。

 

エルビス演算子

またの名をプレスリー演算子(呼ばないです)

先ほどの例では、true,false両方の処理を必要としたが、片側だけの処理で良い場合は、それを省略して書くことができる。

 

例文

if($score >= 70){

  echo '合格';

}

 

という処理があったとすると、

$score < 70 ?: echo '合格';

 

となる。

これは、falseの場合のみの処理を記述しているが、

trueの場合だけの処理はできないため、実行した方の条件を必ずfalseで返す必要がある。

PHP5.3以降から使用できる。

 

 

ちょっと面白い書き方

$array[$bool ? '0' : '1'] = 'sample';

 

<div class="<?php echo $bool ? 'red' : 'blue';?>">

 

こういった書き方は少し面白いかもしれない。

しかし、可読性を落とすため、私としてはあまりお勧めはしない。

 

三項演算子を使用するときは、単純なif文だけ

多重にネストしているようなif文を三項演算子で記述すると、とんでもないことになる。

試しに書いてみよう。

echo $a ? 'a' : $b ? 'b' : $c ? 'c' : 'false';

 

これは、$a,$b,$cいずれかがtureなら

c が出力され、すべてがfalseならfalseが出力されるという意味になる。

 

echo $a ? $b ? $c ? 'c' : 'b' : 'a' : 'false';

 

これならどうだろうか。

この場合は、$aがfalseならその時点でfalseが出力されることが決まり、

$aがtrue なら a

$aがtrue かつ $bがtrue なら b

$aがtrue かつ $bがtrue かつ $cがtrue なら c

という意味になる。

 

もし、こんなコードがかかれていようものなら、書いた本人を小一時間問い詰めたいところですね。

 

echoとprintの使い分け

三項演算子を使用して文字を出力するときには、echoとprintの使い方に注意が必要。

echoの場合

echo $bool ? 'true' : 'false';

 

 

printの場合

$bool ? print 'true' : print 'false';

 

という記述をします。

エラーが出てしまっているという方は、書き方を変更してみてください。

 

三項演算子は、とても便利な反面、可読性を落とす要因となる可能性が高いです。

そのため、利用するときには、単純な条件分岐のみ使用し、ネストするような場合には、使用しないようにしましょう。

コメントを残す

CAPTCHA