Php 短if语句

Php 短if语句,php,Php,我发现了一些奇怪的东西。。。, 我的函数末尾有一段代码: return $class == 3?"red":$class==2?"orange":$class==1?"yellow":""; 现在,当$class==2时,返回的是“黄色”,而不是我预期的“橙色”。 有人能给我解释一下吗?您需要使用括号,因为三元运算符在PHP中是左关联的。结合性是“在没有括号的情况下,相同优先级的运算符如何分组”-来自 您需要使用括号,因为三元运算符在PHP中是左关联的。结合性是“在没有括号的情况下,相同优先级

我发现了一些奇怪的东西。。。, 我的函数末尾有一段代码:

return $class == 3?"red":$class==2?"orange":$class==1?"yellow":"";
现在,当
$class==2
时,返回的是“黄色”,而不是我预期的“橙色”。
有人能给我解释一下吗?

您需要使用括号,因为三元运算符在PHP中是左关联的。结合性是“在没有括号的情况下,相同优先级的运算符如何分组”-来自


您需要使用括号,因为三元运算符在PHP中是左关联的。结合性是“在没有括号的情况下,相同优先级的运算符如何分组”-来自


我决不会那样编写代码。我相信当你编码的时候,你真的很想立刻看到一段代码在做什么。这样做不行,这只会让你头疼;-)

也许可以把它换成清晰的东西:

switch($class) {
    case 1:
        return 'yellow';

    case 2:
        return 'orange';

    case 3:
        return 'red';

    default:
        return '';
}

我决不会那样编写代码。我相信当你编码的时候,你真的很想立刻看到一段代码在做什么。这样做不行,这只会让你头疼;-)

也许可以把它换成清晰的东西:

switch($class) {
    case 1:
        return 'yellow';

    case 2:
        return 'orange';

    case 3:
        return 'red';

    default:
        return '';
}
使用括号:

$class  = 2;
echo $class == 3?"red":($class==2?"orange":($class==1?"yellow":""));
输出:
橙色
使用括号:

$class  = 2;
echo $class == 3?"red":($class==2?"orange":($class==1?"yellow":""));

输出:
orange

这是因为它被视为:

return (($class == 3?"red":$class==2)?"orange":$class==1)?"yellow":"";
因此,添加括号以强制正确使用:

return $class == 3?"red":($class==2?"orange":($class==1?"yellow":""));

这是因为它被视为:

return (($class == 3?"red":$class==2)?"orange":$class==1)?"yellow":"";
因此,添加括号以强制正确使用:

return $class == 3?"red":($class==2?"orange":($class==1?"yellow":""));

它是php中的三元运算符,相当于if-else语句。它是打字错误还是真实代码?最后一个“类”前面缺少“$”符号?请RTFM:@NiekvanderSteen它是一个输入错误它是php中的三元运算符,它与if-else语句等效它是一个输入错误还是真实代码?最后一个“类”前面缺少的“$”符号?请RTFM:@NiekvanderSteen这是一个输入错误我用数组解决了它:$colors=array(“,”黄色“,”橙色“,”红色“);返回$colors[$class];我只是想知道为什么它不起作用,而不是一种不同的方法。你和@Voitcus给了我正确的答案。啊,对不起,我将编辑我的答案并删除建议的替代方法。您上面写的数组方法是一个很好的解决方案:-)我用数组解决了它:$colors=array(“,”黄色“,”橙色“,”红色“);返回$colors[$class];我只是想知道为什么它不起作用,而不是一种不同的方法。你和@Voitcus给了我正确的答案。啊,对不起,我将编辑我的答案并删除建议的替代方法。上面编写的数组方法是一个很好的解决方案:-)