2017-01-13 17 views
1

なぜPHPで三項演算子の連結

1 == 1 ? 'green' : 1 < 0 ? 'red' : 'yellow' 

リターンred

私はJavaとJavascriptに由来しています。この式は、​​を返します。

それを表示するシンプルなフィドル:https://jsfiddle.net/yt0e8t93/

+0

ここにPHPの謎があります:https://eval.in/715786 –

+0

ありがとう、私はPHPの存在を知らなかった:)今...なぜ結果はPHPで赤ですか? O_o – Mistre83

+0

PHPの神々は入れ子の三項を使ってあなたを罰しています:) –

答えて

3

C、C++、Java、およびJavascriptが原因右からのもの三項条件演算子の結合性

1 == 1 ? 'green' : (1 < 0 ? 'red' : 'yellow')

としてこれを評価しますすべての言語で左に(これは、ifのステートメントが考え出される前に戻る)。

しかし、PHPの人は異なると思っていました。これは、順番にtruthyある'red''green'ようです'green' ? 'red' : 'yellow'に簡素化

(1 == 1 ? 'green' : 1 < 0) ? 'red' : 'yellow'

としてPHPでは、あなたの式が評価されます。あなたは昔ながらの方法をしたい場合は、上記のようにかっこを使用してください。

+0

Yep:https://eval.in/715809 –

+0

「eval in」は「悪」のアナグラムであることは間違いありません。 – Bathsheba

+0

はい、かっこで動作します...申し訳ありませんが、私は通常JavaとJavascriptでプログラムします。おかげでPHPの男たち:) – Mistre83