在java和js中的求值結果都為5,而PHP中卻為4
是不是因為我這個式子寫的不太規範?還是其他原因,求解
又讓別人用.net和c語言試了試都是5
【已解決】謝謝各位解答,我猜測的就是式子寫的不太規範,因為我一直覺得三元是從右往左的,所以最後的括號我省略了(以前也常這樣寫),會改正,為了規範,應該是3<8?(9<6?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。
所以如果不清楚運算子的優先級,就把括號都補全了。 ^_^