php简写如果

时间:2011-07-20 08:44:23

标签: php if-statement

我正在努力理解为什么下面的代码在我期待'FOO1'时回应'FOO2'

$tmp = 'foo1';
echo $tmp == 'foo1' ? 'FOO1' : $tmp == 'foo2' ? 'FOO2' : 'NO FOO';

4 个答案:

答案 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');