たまに三項演算子は悪だと決めつけ、利用しない人がいるが、とても便利な書き方なので、この記事を読む方は是非とも利用を検討してほしい。
三項演算子とは...
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';
という記述をします。
エラーが出てしまっているという方は、書き方を変更してみてください。
三項演算子は、とても便利な反面、可読性を落とす要因となる可能性が高いです。
そのため、利用するときには、単純な条件分岐のみ使用し、ネストするような場合には、使用しないようにしましょう。