ROUTE 3390

備忘録的な用途で書いていますが、どなたかの役に立つ事があれば嬉しいです。

三項演算子の利用と注意

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号'が返るわけです。


読むの大変になるので、あんまり連結して使うもんじゃないですね。