PHP嵌套条件运算符错误?

Bar*_*lom 4 php conditional-operator

   
                return
                    true  ? 'a' :
                    false ? 'b' :
                                                           'c';

这应该返回'a',但它不会.它返回'b'.PHP处理条件运算符的不同部分的顺序是否存在错误?

我从这种情况下的多个条件运算符得到了一个好主意吗?它看起来似乎正常工作.

(当然,真实和假是为了示例的目的.在实际代码中,它们分别是评估为真和假的语句.是的,我知道这肯定)

Ric*_*ams 8

建议您避免"堆叠"三元表达式.PHP在单个语句中使用多个三元运算符时的行为是不明显的

来自PHP手册 "非显而易见的三元行为".

三元运算符从左到右进行评估,因此除非您添加大括号,否则它不会按预期运行.以下可行,

return (true ? "a" : (false ? "b" : "c"));
Run Code Online (Sandbox Code Playgroud)


Dav*_*d M 6

怀疑它正在评估(true ? 'a' : false)作为第二个三元运算符的输入并将'a'解释为真.适当地尝试包围.