Heim > Fragen und Antworten > Hauptteil
Das Auswertungsergebnis in Java und JS ist 5, aber in PHP ist es 4
Liegt es daran, dass meine Formel nicht standardisiert geschrieben ist? Oder hat es andere Gründe? Ich habe andere gebeten, es mit .net und C-Sprache zu versuchen Ich denke, dass das Ternär von rechts nach links ist, also habe ich die letzte Klammer weggelassen (ich habe es schon oft so geschrieben, ich werde es aus Gründen der Standardisierung korrigieren, es sollte 3<8?(9<6?) sein. 7:5):(2>0?4:1 )
typecho2017-06-08 11:04:07
三元运算符结合方向的问题:
java 从右向左。等效于3<8?(9<6?7:5):(2>0?4:1)
php 从做向右。等效于(3<8?(9<6?7:5):2)>0?4:1
因此为了避免歧义代码的产生,该写的括号还是不要省略的好
代言2017-06-08 11:04:07
我猜是php对优先级的解读跟java、js等语言不一样,它可能解读成了 (3 < 8 ? (9 < 6 ? 7 : 5) : 2 > 0) ? 4 : 1
某草草2017-06-08 11:04:07
在PHP中是这样的:
$a = (3 < 8 ? (9 < 6 ? 7 : 5): 2 > 0)
? 4
: 1;
所以是 4;
在JavaScript中是这样的:
var a = (3 < 8)
? (9 < 6 ? 7 : 5)
: (2 > 0 ? 4 : 1);
所以是 5。
所以如果不清楚运算符的优先级,就把括号都补全了。^_^