2013-07-11 34 views

回答

3

switch文檔:

注: 注意,切換/情況下確實鬆散比較。

Check the falsy-ness for '0',這很糟糕,我知道。您的案例評估結果爲false,正如您可以在鏈接的TBL ('0' == false) === true中看到的那樣。

我想你switch聲明更改爲:

switch(true) 
{ 
    case ($concept >'0'): 
     echo 'Impossible'; 
    break; 
} 

此外,像文檔說:switch是執行寬鬆比較迴路狀結構。你不能自己選擇比較操作符。如果您想檢查的$concept值對案件的數組,你必須寫:

switch($concept) 
{ 
    case '0': echo 'a zero string'; break; 
    case '1': echo 'a 1 concept'; break; 
} 
+0

謝謝Elias for你的解決方案,它工作正常。 –

3

您的交換機是在$概念;你的情況是($ concept>'0'),它的結果爲FALSE,所以你的意思是case FALSE:;該FALSE與開關條件($概念)進行比較,該開關條件爲'0';寬鬆輸入比較'0'和FALSE,其值爲TRUE;因此該案件得到滿足。

我不是你真正理解switch語句實際上做了什麼;但它不僅僅是一個替代if語句

+0

因此,另一種方法是使用if語句? –

+0

在這種情況下,if語句會簡單很多,並且代碼在邏輯上更具可讀性 –

+0

感謝Mark對您的回答,我已經提出了這個意見,但是我還是將其他答案作爲我需要的。抱歉。 –

1

您的情況匹配,因爲false==false這是怎麼發生的首先將您的開關條件是$concept初始值爲字符串「0」。

然後讓我們把你的case語句是$concept > 0這個表達式計算到false並且在切換塊執行之前被評估,因爲switch語句將塊值與調用值匹配。

然後當匹配正在進行時,您的$concept value =「0」正在轉換爲布爾值false

所以false==false

+0

他得到'true'而不是'false'。 – HamZa

+0

(false == false) – DevZer0

+0

從你的回答中不太清楚... – HamZa

3

它的工作原理是這樣的。

<?php 

    $concept = '0'; // 1. This is a string 

    switch ($concept) { // 3. boolean FALSE is compared to $concept, 
         // which forces $concept to be cast to boolean, 
         // thus the comparison is FALSE == FALSE which equals TRUE 

     case ($concept > '0'): // 2. ($concept > '0') evaluates to boolean FALSE 
      $score = 'Y'; 
      break; 

    } 

請注意我在評論中添加的數字,以顯示評估事物的順序。 (非常簡單)。

你能做些什麼來避免類型的問題是這樣的:

<?php 

    $concept = '0'; 

    switch (TRUE) { 

     case ($concept > '0'): 
      $score = 'Y'; 
      break; 

    } 

這樣做是所有的情況下,條件比較爲TRUE,而更象你所期望的。請注意,交換機的這種用法有點不合常規,但可以避免在PHP中出現一些類型轉換問題。

2

它比較$概念與概念$的結果> '0'

$concept = '0' // '0' == false 
$concept > '0' // '0'>'0' == false 

您衆所周知聲明等於:

switch (false){ 
    case (false): 
    $score = 'Y'; 
    break; 
} 
相關問題