PHP三元运算符的运算顺序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whosheng/article/details/77770592

最近在工作中写了一个比较长的三元运算表达式,但是结果始终是错误的,在网上搜了相关信息了解到,原来php的三元运算顺序是反的(相对于javascript),在此感谢师兄们的分享,本着传播文明的思想,在此整理分享,希望能帮助更多的人。

$type = 2;
echo $type == 1 ? "一" : $type == 2 ? "二"  : $type == 3 ? "三" : "四"

上面这个例子按照javascript运算规则应该输出“二”,
而php输出的结果是“三”,因为php的三元运算顺序是从左到有,我们通过拆分法来分析下PHP的运算步骤:

第一步: t y p e == 1 ? " ": type == 2,运算结果是$type == 2,运算这步后表达式等价于

$type == 2 ? "二"  : $type == 3 ? "三" : "四"

第二步: t y p e == 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 ? "一" : "二"

最终运算结果就是输出“二”;

为什么站长的收益越来越少?

猜你喜欢

转载自blog.csdn.net/whosheng/article/details/77770592