我正在努力理解为什么下面的代码在我期待'FOO1'时回应'FOO2'
$tmp = 'foo1';
echo $tmp == 'foo1' ? 'FOO1' : $tmp == 'foo2' ? 'FOO2' : 'NO FOO';
答案 0 :(得分:8)
$tmp = 'foo1';
echo $tmp == 'foo1' ? 'FOO1' : ($tmp == 'foo2' ? 'FOO2' : 'NO FOO');
答案 1 :(得分:4)
基本上PHP将其分解为:
$tmp = 'foo1';
echo ($tmp == 'foo1' ? 'FOO1' : $tmp == 'foo2') ? 'FOO2' : 'NO FOO';
括号中的部分将返回FOO1
,其评估为TRUE
,因此第二个条件语句基本上为TRUE ? 'FOO2' : 'NO FOO';
- 反过来总是评估为'FOO2'
注意:这与C三元运算符关联性
不同答案 2 :(得分:1)
$tmp = 'foo1';
if($tmp == 'foo1') echo 'FOO1';
else if($tmp == 'foo2') echo 'FOO2';
正如您刚刚发现的那样,三元运算符是一个混乱的雷区,尤其是当您尝试 nest 堆叠它们时。不要这样做!
修改强>
PHP手册还建议不要堆叠三元运算符: -
建议您避免“堆叠”三元表达式。 PHP在单个语句中使用多个三元运算符时的行为是不明显的:
请参阅PHP Manual
此页面上的示例3答案 3 :(得分:0)
$tmp = 'foo1';
echo $tmp == 'foo1' ? 'FOO1' : ($tmp == 'foo2' ? 'FOO2' : 'NO FOO');