return true ? 'a' : false ? 'b' : 'c';
这应该返回'a',但它不会。它返回'b'。 PHP处理条件运算符的不同部分的顺序是否存在错误?
我从Are multiple conditional operators in this situation a good idea?得到了这个想法似乎正常工作的想法。
(当然,真实和假是出于示例的目的。在实际代码中,它们分别是评估为真和假的语句。是的,我知道这是肯定的)
答案 0 :(得分:8)
建议您避免 “堆叠”三元表达式。 PHP的 使用多个时的行为 单一的三元运算符 陈述不明显
来自“非明显三元行为”下的PHP Manual。
三元运算符从左到右进行评估,因此除非您添加大括号,否则它不会像您期望的那样运行。以下内容可行,
return (true ? "a" : (false ? "b" : "c"));
答案 1 :(得分:6)
怀疑它正在评估(true ? 'a' : false)
作为第二个三元运算符的输入并将'a'解释为true。请适当地尝试包围。
答案 2 :(得分:3)
操作顺序:
>>> return true ? 'a' : false ? 'b': 'c';
'b'
>>> return true ? 'a' : (false ? 'b': 'c');
'a'
答案 3 :(得分:0)
让我以同样的方式解释它向我解释。但是你必须在括号中注意以了解正在发生的事情。
下面的PHP代码
Font
相当于:
'window
以下代码
true ? "a" : false ? "b" : "c"
相当于:
(true ? "a" : false) ? "b" : "c"