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