PHP优先级运算符A? ' True':' False'

时间:2016-01-21 12:59:55

标签: php

我遇到了一个问题,我在这句话<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app" ng-controller="ctrl" id="div"> Visible <div ng-hide="true">Text</div> </div> <button onclick="printDiv()">Print</button>

中加入了更多条件

正如我所知道的?的关联性来自左边

这是示例

A? 'True': 'False' =回答&#39; c&#39;
(1 == 2)?'a':(2==3)?'b':'c' =回答&#39; b&#39;

正如我所知(1 == 2)?'a':(2==2)?'b':'c',然后它进入错误状态(1 == 2)==false并且返回错误,所以答案是c(可能是错误的,请纠正我)

以上示例工作正常,但

时开始出错

(2==3) =回答&#39; b&#39;
(1 == 1)?'a':(2==3)?'b':'c' =回答&#39; b&#39;

据我所知 (1 == 1)?'a':(2==2)?'b':'c',所以它应该选择&#39; a&#39;并忽略其余部分。

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

2 个答案:

答案 0 :(得分:7)

嵌套三元组可能会出现问题,因为很难读取正在发生的事情。包围正确解决了这个问题:

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

如下所示:如果1等于1则a,否则执行2等于3。

答案 1 :(得分:2)

在您的语句(1 == 1) ? 'a' : (2 == 3) ? 'b' : 'c'中,第一个条件语句确实返回'a',但由于在您的第一个条件语句之后还有另一个条件语句,它希望将'a'true进行比较或false。由于条件语句中的string将始终返回true,因此第二个条件语句将返回'b'

您将要使用以下语句:

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