0

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

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

现在,当$class == 2它返回“黄色”而不是“橙色”时,就像我预期的那样。谁可以给我解释一下这个?

4

4 回答 4

3

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

$class  == 3?"red":($class ==2?"orange":($class ==1?"yellow":""));
于 2013-03-28T08:52:16.020 回答
2

这是因为它被视为:

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

所以添加括号以强制正确使用:

return $class == 3?"red":($class==2?"orange":($class==1?"yellow":""));
于 2013-03-28T08:54:14.020 回答
1

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

也许将其更改为明确的内容:

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

    case 2:
        return 'orange';

    case 3:
        return 'red';

    default:
        return '';
}
于 2013-03-28T08:52:56.237 回答
0

使用括号:

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

输出 :orange

于 2013-03-28T08:53:20.737 回答