1. 程式人生 > >PHP三元運算子的運算順序

PHP三元運算子的運算順序

最近在工作中寫了一個比較長的三元運算表示式,但是結果始終是錯誤的,在網上搜了相關資訊瞭解到,原來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 ? "一" : "二"

最終運算結果就是輸出“二”;