PHP 优先级运算符 A?“真”:“假”


PHP precedence operator A? 'True': 'False'

我遇到了一个问题,我在这个语句中加入了更多的条件A? 'True': 'False'

据我所知,?:的结合性来自左边

这是一个例子

(1 == 2)?'a':(2==3)?'b':'c' = 答案"c"
(1 == 2)?'a':(2==2)?'b':'c' = 答案"b"

据我所知(1 == 2)==false,然后它进入了错误条件(2==3)和错误返回,所以答案是c(可能是错误的,请纠正我)

上面的例子工作正常,但是当它开始出错时

(1 == 1)?'a':(2==3)?'b':'c' = 答案"b"
(1 == 1)?'a':(2==2)?'b':'c' = 答案"b"

据我所知 (1 == 1) == true,所以它应该选择"a"并忽略其余部分。

参考:http://php.net/manual/en/language.operators.precedence.php

嵌套的三元可能会有问题,因为很难阅读正在发生的事情。括号可以正确解决问题:

(1 === 1) ? 'a' : ((2==3) ? 'b' : 'c')

这读起来是这样的:如果 1 等于 1,那么 a,否则如果 2 等于 3,则执行。

在你的语句(1 == 1) ? 'a' : (2 == 3) ? 'b' : 'c'中,第一个条件语句确实返回'a',但由于在你的第一个条件语句之后还有另一个条件语句,它想比较'a' truefalse。由于条件语句中的string将始终返回 true ,第二个条件语句返回 'b'

您需要按如下方式使用语句:

(1 == 1) ? 'a' : ((2 == 3) ? 'b' : 'c')