ITPHP

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

たまに三項演算子は悪だと決めつけ、利用しない人がいるが、とても便利な書き方なので、この記事を読む方は是非とも利用を検討してほしい。 三項演算子とは… if文を省略した書き方であり、 式 ? true処理 : false処理 ; のように、一行にまとめることができる。

三項演算子

例文

if($num % == 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';

という記述をします。 エラーが出てしまっているという方は、書き方を変更してみてください。 三項演算子は、とても便利な反面、可読性を落とす要因となる可能性が高いです。 そのため、利用するときには、単純な条件分岐のみ使用し、ネストするような場合には、使用しないようにしましょう。