4
   
                返回
                    真的 ?'一种' :
                    错误的 ?“乙”:
                                                           'C';

这应该返回'a',但事实并非如此。它改为返回“b”。PHP 处理条件运算符不同部分的顺序是否存在错误?

我的想法是在这种情况下使用多个条件运算符是个好主意吗?它似乎可以正常工作的地方。

(当然,true 和 false 是出于示例的目的。在真实代码中,它们是分别评估为 true 和 false 的语句。是的,我肯定知道)

4

4 回答 4

8

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

来自“非显而易见的三元行为”下的PHP 手册。

三元运算符是从左到右计算的,所以除非你添加大括号,否则它不会像你预期的那样运行。以下将起作用,

return (true ? "a" : (false ? "b" : "c"));
于 2009-12-17T12:35:25.627 回答
6

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

于 2009-12-17T12:30:08.147 回答
3

操作顺序:

>>> return true ? 'a' : false ? 'b': 'c';
'b'
>>> return true ? 'a' : (false ? 'b': 'c');
'a'
于 2009-12-17T12:29:42.813 回答
0

让我以与向我解释相同的方式解释。但是您必须注意括号中的内容才能了解正在发生的事情。

PHP的

下面的PHP代码

true ? "a" : false ? "b" : "c"

相当于:

(true ? "a" : false) ? "b" : "c"

其他语言

下面的代码

true ? "a" : false ? "b" : "c"

相当于:

true ? "a" : (false ? "b" : "c")
于 2016-12-21T18:59:14.813 回答