我遇到了一个问题,我在这个语句中加入了更多的条件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'
true
或false
。由于条件语句中的string
将始终返回 true
,第二个条件语句返回 'b'
。
您需要按如下方式使用语句:
(1 == 1) ? 'a' : ((2 == 3) ? 'b' : 'c')