三項演算子の利用と注意
PHPで三項演算子というのは「?」クエスチョンと「:」コロンを利用したif文を指します。
例えばこんなの
$buff = 1; if($buff == 1) { echo 'sasakure1号'; } else { echo 'sasakure2号'; } echo ($buff == 1)? 'sasakure1号' : 'sasakure2号';
上のif文と下の三項演算子は同じ結果となります。
※sasakure1号をechoします。
($flg)? true : false;
クエスチョンの左側が「true」と評価されれば コロンの左側を返し、そうでなければコロンの右側を返します。
では次の結果はどうなるでしょう。
$buff = 1; if($buff == 1) { echo 'sasakure1号'; } elseif ($buff = 2) { echo 'sasakure2号'; } else { echo 'sasakure3号'; } echo ($buff == 1)? 'sasakure1号' : ($buff == 2)? 'sasakure2号' : 'sasakure3号';
上のif文はsasakure1号をechoします。
しかし、三項演算子のほうはsasakure2号をechoします。
これが三項演算子の要注意事項です!
ではどのように評価されているのか順番に見てみましょう。
echo ($buff == 1)? 'sasakure1号' : ($buff == 2)? 'sasakure2号' : 'sasakure3号';
三項演算子は左側から評価していきますので、($buff == 1)を評価します。
$buffには1が格納されているので、TRUEと評価されます。
すると下記のような式とみなされます。
echo ('sasakure1号')? 'sasakure2号' : 'sasakure3号';
三項演算子は括弧の中を評価するのではなく、クエスチョンの左側を評価します。
この場合'sasakure1号'という文字列はTRUEと評価されますので'sasakure2号'が返るわけです。
読むの大変になるので、あんまり連結して使うもんじゃないですね。