タグ

三項演算子に関するsibusukeのブックマーク (2)

  • なぜ PHP の三項演算子は左結合なのか - y_uti のブログ

    PHP の三項演算子が左結合で使いにくいという話題についてです。 次のプログラムは大抵の言語では one を表示するのですが、PHP では two になってしまいます。 <?php $var = 1; echo ($var == 1 ? 'one' : $var == 2 ? 'two' : 'three') . "\n"; 三項演算子が左結合なので、このコードは次のように解釈され、 <?php $var = 1; echo (($var == 1 ? 'one' : $var == 2) ? 'two' : 'three') . "\n"; 文字列 'one' は真偽値としては true になるので、結果的に 'two' が戻されるというわけです。 このような言語仕様になっている理由が気になったので、探してみました。 Bug #61915 incorrect associativity

    なぜ PHP の三項演算子は左結合なのか - y_uti のブログ
  • perlとphpで三項演算子の挙動が違う件 - omoonのブログ

    最高にはまった。そんなの有りか!と叫びたい。 perlでは、 my $p = 1; my $q = 1; my $r = $p ? 'p' : $q ? 'q' : 'foo'; print $r; とすると、「p」が返ってくるが、 phpでは、 <?php $p = 1; $q = 1; $r = $p ? 'p' : $q ? 'q' : 'foo'; print $r; ?> なんと、「q」が返る。 このあたりの解説によると、 <?php // ぱっと見た感じでは、これは 'true' と表示されると思うでしょう。 echo (true?'true':false?'t':'f'); // しかし、実際には上の出力結果は 't' です。 // なぜなら、三項演算子は左から右へ順に評価されるからです。 // 上のコードをもう少しわかりやすく書くと、このようになります。 echo ((tr

    perlとphpで三項演算子の挙動が違う件 - omoonのブログ
  • 1