最近在工作中写了一个比较长的三元运算表达式,但是结果始终是错误的,在网上搜了相关信息了解到,原来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 ? "一" : "二";
最终运算结果就是输出“二”;