4

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

$level  = 0;

                switch($level){                                                                                       

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

你能用这样的switch语句吗?

4

7 回答 7

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';
}

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

于 2012-10-03T21:49:15.743 回答
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';
于 2010-09-05T15:04:18.157 回答
4

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

switch (true)                                                                               
    case $level > -100:
        break;
    case $level <  100:
        break;
    default:
        echo '5';
        return null;
}
于 2010-09-05T15:19:05.917 回答
2

其他答案同时正确和错误。不正确,因为可以在 PHP 中做你想做的事情......更改switch($level)switch(true)你的示例将起作用。正确,因为它的形式很糟糕,如果任何其他程序员在您的代码中看到它,他们可能会用干草叉来追随您。这不是 switch 语句的预期使用方式,并且在大多数其他语言中都不会那样工作。

于 2010-09-05T15:10:56.950 回答
0

不,你不能。Switch 仅进行“等于”类型比较。

于 2010-09-05T15:02:28.663 回答
0

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

if(!($level > -100 && $level < 100))
{
  echo '5';
  return null;
}
于 2010-09-05T15:03:59.490 回答
-3

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

于 2010-09-05T15:07:36.683 回答