2012-07-09 129 views
0

使用ifelseif,可以很容易地進行下面的比較,但出於學習的目的,我正在分析是否可以使用switch具有相同的功能。是否可以使用帶有表達式的switch語句作爲case?

如果$x收到一個正或負的價值,我得到正確的輸出,但如果$x接收0(零),我得到的輸出「低」,但正確的輸出應該是「平等」。

下面是代碼:

$x = 0; 

switch($x) 
{ 
    case ($x < 0): 
     echo 'Lower'; 
     break; 

    case ($x == 0): 
     echo 'Equal'; 
     break; 

    case ($x > 0): 
     echo 'Bigger'; 
     break; 
    default: 
     echo 'Not found'; 
} 

是否有可能使用switch語句表達爲個案?

+0

有一個「突破」;在「echo」未找到之後缺少「;」 – 2012-07-09 00:52:35

+4

不,沒有,因爲這是默認設置。 – Lusitanian 2012-07-09 00:54:14

+3

@HighKickX,因爲它是最後一個選項,所以沒必要放置'break;' – 2012-07-09 00:56:39

回答

1

更換您有效地沒有任何更多匹配的號碼,但配套的布爾結果。

任何正數或負數強制轉換爲布爾true只有0強制轉換爲false,所以基本上對你是比較true($x < 0)($x > 0)一個正數或負數,並且給你所期望的結果。

然而,0轉換爲false(0 == 0)true所以你永遠不會有匹配。而且0 < 0也是false,您在交換機中的第一條語句是匹配的。

+0

由於'0 <'是'false',爲什麼第一條語句匹配?對於'0 <0'和'false <0',表達式評估爲「false」。 – nickb 2012-07-09 01:12:37

+0

@nickb,'$ x'是'0',我明白了這一點:'0 <0'是'false'?由於這個表達式是「真」,它將被匹配。 – 2012-07-09 01:18:51

+1

非常明確的解釋,jeroen!現在我明白髮生了什麼,非常感謝! – 2012-07-09 01:20:10

4

switch($x)switch(true)

+0

簡單而明智的建議,非常感謝! – 2012-07-09 01:31:59

0

您正在比較$ x是否等於測試結果,$x = 0,$ x的布爾值是false。如果它不是0,則是true。這就是爲什麼你總是會回到第一次測試返回false

試試這個:

$x = 0; 

switch($x) 
{ 

case 0: 
    echo 'Equal'; 
    break; 

case ($x < 0): 
    echo 'Lower'; 
    break; 

case ($x > 0): 
    echo 'Bigger'; 
    break; 

default: 
    echo 'Not found'; 

} 

我也是你想知道是否有可能在switch的每個case使用句子的評論閱讀。是的,它是可能的:

$x = 0; 

switch($x) 
{ 

case ($x < 0): 
    echo 'Lower'; 
    break; 

case ($x > 0): 
    echo 'Bigger'; 
    break; 

case ($x <> 0): 
    echo 'Equal'; 
    break; 

default: 
    echo 'Not found'; 

} 

($x <> 0)將返回false時$x = 0,它會響應「平等」

+1

@ grigore-turbodisel解決方案簡單得多,但我發現使用開關($ x) – 2012-07-09 01:34:28

相關問題