[PHP]三項演算子の入れ子に注意

Read More


三項演算子はちょっとした処理を書くときに便利な演算子。
無駄な行数を減らすことができるので可読性を上げるのに便利な演算子だ。

ただし基本的にちょっとした処理にしか使わない方がよい。
これが暗黙のルール。



と、ここまでが前提。


--
今日は以前書いたプログラムに修正を入れていたんだけど、
とある部分が三項演算子で書かれていた。


簡単に書くとこんな感じのもの。
$a = 'aaa';
$res = ($a)?'1':'0';
echo $res;


この実行結果は
> 1

となる。


うん、ここまではよい。





これに一部手を加えて変更したものが以下。
$a = 'aaa';
$b = 'bbb';
$res = ($a)?'1':($b)?'2':'0';
echo $res;


面倒だったから元の形をあまり崩したくなかったから入れ子にした。


追加の条件を加えるという修正内容だったので、
ついつい三項演算子の中に三項演算子を加えたわけだ。


この実行結果は、
> 2

となった。


はい、ダメですね。
期待通りの動作じゃない。



正しくはこう書く。
$a = 'aaa';
$b = 'bbb';
$res = ($a)?'1':(($b)?'2':'0');
echo $res;


入れ子にしたものは括弧でくくる







はい、当たり前のことだけどまた一つ勉強になりました。





あと冒頭に書いたけど、
三項演算子はちょっとした処理にしか使わない方がよい。

どこまでを「ちょっとした処理」と定義するかにもよるが、
素直にif文にバラした方が良い。こともある…