返回 真的 ?'一种' : 错误的 ?“乙”: 'C';
这应该返回'a',但事实并非如此。它改为返回“b”。PHP 处理条件运算符不同部分的顺序是否存在错误?
我的想法是在这种情况下使用多个条件运算符是个好主意吗?它似乎可以正常工作的地方。
(当然,true 和 false 是出于示例的目的。在真实代码中,它们是分别评估为 true 和 false 的语句。是的,我肯定知道)
返回 真的 ?'一种' : 错误的 ?“乙”: 'C';
这应该返回'a',但事实并非如此。它改为返回“b”。PHP 处理条件运算符不同部分的顺序是否存在错误?
我的想法是在这种情况下使用多个条件运算符是个好主意吗?它似乎可以正常工作的地方。
(当然,true 和 false 是出于示例的目的。在真实代码中,它们是分别评估为 true 和 false 的语句。是的,我肯定知道)
建议您避免“堆叠”三元表达式。在单个语句中使用多个三元运算符时 PHP 的行为并不明显
来自“非显而易见的三元行为”下的PHP 手册。
三元运算符是从左到右计算的,所以除非你添加大括号,否则它不会像你预期的那样运行。以下将起作用,
return (true ? "a" : (false ? "b" : "c"));
怀疑它正在评估(true ? 'a' : false)
为第二个三元运算符的输入并将“a”解释为真。尝试适当地包围。
操作顺序:
>>> return true ? 'a' : false ? 'b': 'c';
'b'
>>> return true ? 'a' : (false ? 'b': 'c');
'a'
让我以与向我解释相同的方式解释。但是您必须注意括号中的内容才能了解正在发生的事情。
下面的PHP代码
true ? "a" : false ? "b" : "c"
相当于:
(true ? "a" : false) ? "b" : "c"
下面的代码
true ? "a" : false ? "b" : "c"
相当于:
true ? "a" : (false ? "b" : "c")