php切换案例问题

时间:2010-09-05 15:00:59

标签: php switch-statement evaluation

我想说$level > -100 && $level < 100

$level  = 0;

                switch($level){                                                                                       

                case $level > -100:                                                                                   
                break;
                case $level <  100:                                                                                   
                break;
                default:
                echo '5';
                return null;                                                                                          
                }              

你可以使用像这样的开关语句。

7 个答案:

答案 0 :(得分:6)

到目前为止,所提出的答案都没有显式将原始问题的精神与正确的开关结构联系起来。所以,为了记录:

switch (true) {
    case (($level>-100) && ($level<100)):
        echo 'in range one';
        break;
    case (($level>200) && ($level<300)):
        echo 'in range two';
        break;
    default:
        echo 'out of range';
}

这种开关的用法绝对没有错。

答案 1 :(得分:4)

当您说switch ($level)时,您已经在比较$level的值。然后每个case只能检查是否相等,你不能像你的例子那样进行比较。您将不得不使用if语句:

if ($level > -100 && $level < 100)
  ; // do nothing; equivalent of break in this case
else
  echo '5';

更简单,只是否定条件:

if ($level <= -100 || $level >= 100)
  echo '5';

答案 2 :(得分:4)

除了if / else,另一种方法:

switch (true)                                                                               
    case $level > -100:
        break;
    case $level <  100:
        break;
    default:
        echo '5';
        return null;
}

答案 3 :(得分:2)

其他答案同时正确且不正确。不正确,因为可以在PHP中执行您想要的操作...将switch($level)更改为switch(true),您的示例将起作用。正确,因为这是一个糟糕的形式,如果任何其他程序员在你的代码中看到他们可能会跟你一起干草叉。它不是如何使用switch语句,也不会像大多数其他语言那样工作。

答案 4 :(得分:0)

不,你不能。 Switch只进行'等于'类型比较。

答案 5 :(得分:0)

不,你不能。 switch语句需要case块中的文字。改为使用if语句:

if(!($level > -100 && $level < 100))
{
  echo '5';
  return null;
}

答案 6 :(得分:-3)

这是人们提倡case作为if-else的优秀解决方案的原因之一。我不喜欢语法或限制 - if-ifelse-else更有用。