如果声明短

时间:2013-03-28 08:48:24

标签: php

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

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

现在,$class == 2时,这会像我预期的那样返回“黄色”而不是“橙色”。 有人可以向我解释一下吗?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

这是因为它被视为:

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

因此,添加括号以强制正确使用:

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

答案 2 :(得分:1)

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

或许可以将其改为明确的内容:

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

    case 2:
        return 'orange';

    case 3:
        return 'red';

    default:
        return '';
}

答案 3 :(得分:0)

使用括号:

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

输出:orange