最近在工作中寫了一個比較長的三元運算表達式,但是結果始終是錯誤的,在網上搜了相關信息了解到,原來php的三元運算順序是反的(相對于javascript),在此感謝師兄們的分享,本著傳播文明的思想,在此整理分享,希望能幫助更多的人。
$type = 2;
echo $type == 1 ? "一" : $type == 2 ? "二" : $type == 3 ? "三" : "四";
上面這個例子按照javascript運算規則應該輸出“二”,而php輸出的結果是“三”,因為php的三元運算順序是從左到有,我們通過拆分法來分析下PHP的運算步驟:
- 第一步:
$type == 1 ? "一" : $type == 2
,運算結果是$type == 2
,運算這步后表達式等價于
$type == 2 ? "二" : $type == 3 ? "三" : "四";
- 第二步:
$type == 2 ? "二" : $type == 3
,運算結果是"二"
,運算這步后表達式等價于
"二" ? "三" : "四";
因為“一”、“二”等字符串轉成邏輯符號是true
,所以最終結果是“三”
如果我們要讓他從右往左運算,需要把表達式改成:
$type = 2;
echo $type == 1 ? "一" : ($type == 2 ? "二" : ($type == 3 ? "三" : "四"));
還記得小學數學里面的“先算括號再算乘除再算加減”吧,這里同樣是先算括號。
- 第一步:($type == 3 ? "三" : "四")的運算結果是"四",運算這步后表達式等價于
echo $type == 1 ? "一" : ($type == 2 ? "二" : "四");
- 第二步:($type == 2 ? "二" : "四")的運算結果是“二”,之后表達式等價于
echo $type == 1 ? "一" : "二";
最終運算結果就是輸出“二”;