院生エンジニアのにっき

  • Change style to Blue
  • Change style to Red
  • Change style to Green
  • Change style to Pink

PHPの三項演算子の注意点   2008-01-26

  1. <?php
  2. $num = 15;
  3. $res = ($num < 3) ? 1 : ($num < 10) ? 2 : ($num < 30) ? 3 : ($num < 100) ? 4 : 5;
  4. echo $res;
  5. ?>

上のコードの出力結果は以下のうちどれか

  • 1
  • 2
  • 3
  • 4
  • 5
  • エラーメッセージが出力される

正解は4が出力される。理由はPHPの三項演算子は左から評価できる箇所を順に評価するから。

問題の三項演算子を整形すれば以下のようになる。

$res = (((($num < 3) ? 1 : ($num < 10)) ? 2 : ($num < 30)) ? 3 : ($num < 100)) ? 4 : 5;

もし3より小さくなく、10より小さくなく、30より小さい・・・と評価して3と出力させたい場合は以下のようにしなければならない

$res = (($num < 3) ? 1 : (($num < 10) ? 2 : (($num < 30) ? 3 : (($num < 100) ? 4 : 5))));

今日ちょっとはまったのでメモ。


コメントを書く