別に暇なわけじゃないですよ。
今日はphpで三項演算子を利用した際の注意点をメモります。
三項演算子は例えば
<?phpと書くと、出力は
$a = 1;
// 三項演算子
echo $a == 1 ? "$aは1です。" : "$aは1ではありません。";
$aは1です。となります。
書き方は
(式) ? 真の場合 : 偽の場合です。
三項演算子は短く条件分岐を書くことができるので、phpでプログラムを書いた際のView側などで利用できます。
で、
三項演算子を入れ子(ネスト)にした場合、php三項演算子ならではの注意点があります。
<?phpとすると、プログラマーは
$a = 1;
// 三項演算子
echo $a == 1 ? "$aは1です。" : $a == 2 ? "$aは2です。" : "$aは1でも2でもありません。";
$aは1です。と出力されると予想します。
ところがドッコイこの結果は
$aは2です。と出力されてしまいます。危ないですねー。
理由はPHPマニュアル@三項演算子にあるように、phpの三項演算子は左から右へ評価の順が移っていくので、上の例でいくと
1)$a == 1 が評価されtrue
2)"$aは1です。"をechoしようとする
3)(1)で評価されたtrueが次の $a == 2で評価されtrue
4)"$aは2です。"をechoする。
という流れになるみたいです。たぶん、、。
要は(3)で$a == 2 が評価されるときに(1)で評価された結果(true)を持ち越してしまうみたいです。
というわけで、どうしても三項演算子を利用して入れ子をしたい場合は
<?phpと書きましょう。
echo $a == 1 ? "$aは1です。" : ($a == 2 ? "$aは2です。" : "$aは1でも2でもありません。");
以上ーー。
0 件のコメント:
コメントを投稿