2010-09-05 103 views
4

我想說$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 <100))。你有三種情況,其中第一種捕獲-99,第二種捕獲-110,其中第三種(默認)永遠不會被調用。 – Peter 2012-10-03 21:32:06

回答

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

這種使用開關絕對沒有錯。

+0

你忘記了break語句嗎? – 2016-08-25 15:17:46

+0

的確是的,我做到了!謝謝,我添加了它們。 – Peter 2016-10-12 02:17:31

0

不,你不能。開關只做'等於'型比較。

+0

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

+0

+1因爲它絕對不是-1 – NikiC 2010-09-05 19:45:28

0

不,你不能。 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

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

這是原因,人們崇尚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

2

其他答案在同一時間是正確的和不正確的。不正確,因爲它有可能在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

4

相隔的if/else,另一種方式來做到這一點:

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

這與'$ level> -100 && $ level <100'不完全相同。考慮'$ level = -200'。它不會在第一種情況下破裂,但會在第二種情況下破裂。實際上'echo 5;'行永遠不會到達。 – Mchl 2010-09-05 17:23:23

+0

@Mchl - 你說得對,但這實際上是原始問題中的一個錯誤。 NikiC的答案在語法上是正確的,可能是提問者想要做的。 – Peter 2012-10-03 21:33:29