PHP的开关情况下问题

PHP的开关情况下问题

问题描述:

我想说$level > -100 && $level < 100PHP的开关情况下问题

$level = 0; 

       switch($level){                      

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

你可以使用switch语句是这样的。

+0

检查我的答案。它可以使用开关。但我必须告诉你,这不是一个很好用的Switch。 – Starx 2010-09-05 15:52:45

+0

查看我的评论nikic的回答 – Mchl 2010-09-05 17:27:26

+0

我没有看到建议的开关结构如何接近(($ level> -100)&&($ level Peter 2012-10-03 21:32:06

给出的答案都不到目前为止有明确连接原题的精神,适当的开关结构。所以,备案:

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

这种使用开关绝对没有错。

+0

你忘记了break语句吗? – 2016-08-25 15:17:46

+0

的确是的,我做到了!谢谢,我添加了它们。 – Peter 2016-10-12 02:17:31

不,你不能。开关只做'等于'型比较。

+0

现在感觉好多了? – Mchl 2010-09-05 17:44:01

+0

+1因为它绝对不是-1 – NikiC 2010-09-05 19:45:28

不,你不能。 switch声明需要case块中的文字。使用if语句来代替:

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

水平怎么能小于-100和100以上? – 2010-09-05 15:06:48

+0

meh,错误回滚。谢谢 – Femaref 2010-09-05 15:07:52

当你说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'; 

这是原因,人们崇尚case作为一个出色的解决方案,以if-else之一是关闭基础。我不喜欢语法或局限性 - if-ifelse-else更有用。

+0

这完全没有帮助。 – Femaref 2010-09-05 15:09:15

+0

两者都不是“优于”对方;每个都有自己的用途。在这种情况下,“if”语句胜出。 – casablanca 2010-09-05 15:10:49

+0

正确的工具... – Mchl 2010-09-05 15:13:51

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

+3

我认为这很有趣。您可以将开关设置为“真”并对其进行评估这一事实显然是有意的。当你想到它时,它也是非常有意义的。我不会称之为直觉。但它似乎确实导致猛禽从天而降。 – Prospero 2010-09-05 15:52:08

+0

我不同意switch(true)在PHP中是不好的形式。它*是真的,其他一些语言(如Java)不支持switch(true)语法。但是大量的语言*支持类似的构造(包括Perl,Groovy和Go),所以你不能说“没有人这样做,所以你也不应该”。我声称,如果使用得当,它实际上可以使PHP代码至少易于阅读,如同一连串的if/then else。 – Peter 2012-10-03 22:03:46

相隔的if/else,另一种方式来做到这一点:

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

这与'$ level> -100 && $ level Mchl 2010-09-05 17:23:23

+0

@Mchl - 你说得对,但这实际上是原始问题中的一个错误。 NikiC的答案在语法上是正确的,可能是提问者想要做的。 – Peter 2012-10-03 21:33:29