php速记如果

php速记如果,php,if-statement,Php,If Statement,我很难理解为什么在我期待“FOO1”时,下面的代码会呼出“FOO2” $tmp = 'foo1'; echo $tmp == 'foo1' ? 'FOO1' : $tmp == 'foo2' ? 'FOO2' : 'NO FOO'; $tmp = 'foo1'; echo $tmp == 'foo1' ? 'FOO1' : ($tmp == 'foo2' ? 'FOO2' : 'NO FOO'); $tmp = 'foo1'; echo $tmp == 'foo1' ? 'FOO1' : (

我很难理解为什么在我期待“FOO1”时,下面的代码会呼出“FOO2”

$tmp = 'foo1';
echo $tmp == 'foo1' ? 'FOO1' : $tmp == 'foo2' ? 'FOO2' : 'NO FOO';
$tmp = 'foo1';
echo $tmp == 'foo1' ? 'FOO1' : ($tmp == 'foo2' ? 'FOO2' : 'NO FOO');
$tmp = 'foo1';
echo $tmp == 'foo1' ? 'FOO1' : ($tmp == 'foo2' ? 'FOO2' : 'NO FOO');
正如您刚刚发现的,三元运算符是一个混乱的雷区,特别是当您尝试嵌套它们时。别这样

编辑:
PHP手册还建议不要堆叠三元运算符:-

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


参见本页的示例3,PHP将其分解为:

$tmp = 'foo1';
echo ($tmp == 'foo1' ? 'FOO1' : $tmp == 'foo2') ? 'FOO2' : 'NO FOO';
括号中的部分将返回
FOO1
,其计算结果为
TRUE
,因此第二条条件语句本质上是
TRUE?“FOO2':'没有FOO'–它的计算结果总是
“FOO2”


注意:这不同于C三元运算符结合性

Down vote away,当他维护代码时,他会后悔这么做。他一开始很困惑,3个月后会是什么样子?-1这给出了问题的解决方案,但没有首先解释问题的原因。
$tmp = 'foo1';
echo ($tmp == 'foo1' ? 'FOO1' : $tmp == 'foo2') ? 'FOO2' : 'NO FOO';