PHP三元运算符的运算顺序

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

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

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

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

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

第二步: type==2?"":  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 ? "一" : "二"

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值