2012-01-12 15 views
9
switch(false) { 
    case 'blogHitd': 
     echo('ddd'); 
     break; 
    case false: 
     echo('bbbb'); 
     break; 
    default: 
     echo 'alert("error action");'; 
} 

------- ------輸出爲什麼在一個奇怪的邏輯「切換(真){}」在PHP中?

BBBB

switch(true) { 
    case 'blogHitd': 
     echo('ddd');   
     break; 
    case true: 
     echo('bbbb'); 
     break; 
    default: 
     echo 'alert("error action");'; 
} 

-------一種奇怪的輸出---- ---

DDD

爲什麼當我通過true的值時,它會一直選擇第一個?

+0

我現在得到它,每一個 – qidizi 2012-01-12 03:22:45

+0

我很高興幫助!如果將來的用戶閱讀本文以接受答案會有所幫助,所以如果您能做到這一點,那將非常棒! – 2012-01-12 03:40:02

回答

16

從PHP文件上Booleans功能或變量:

當轉換爲boolean,以下值被認爲是FALSE:

  • 布爾值FALSE本身
  • 整數0(零)
  • 浮子0.0(零)
  • 空字符串,字符串 「0」
  • 具有零個 元件
  • 零個成員變量的對象的陣列(PHP 4只)
  • 特殊 類型NULL(包括尚未設定的變量來自 空標籤
創建
  • 的SimpleXML對象

    其他每個值都被視爲TRUE(包括任何資源)。

  • 這段引用的段落的最後一句話就是您案例中的關注點。

    +0

    感謝編輯Oli。我正試圖同時清理它,但你打敗了我。當我粘貼文本時點擊了錯誤的按鈕! – 2012-01-12 02:07:07

    9

    開關「真」是唯一有用的,如果你有你的「案例」行

    switch(true) 
    { 
        case is_array($array): 
        echo 'array'; 
        break; 
        default: 
        echo 'something else'; 
        break; 
    } 
    
    +1

    在我的情況下,這是這個人在我繼承的代碼中所做的事情。這樣一種奇怪的做事方式。 – 2014-09-19 18:36:33

    3

    PHP將強制轉換值你,不要忘記:

    php > var_dump(true == 'bloghitd'); 
    bool(true) 
    
    +0

    您可能使用[phpsh](http://www.phpsh.org)。是不是? – Apostle 2015-02-26 16:13:07

    1

    在這種情況下的開關只運行的第一個有效的情況下。

    如果您有多個可能的答案,但您只想運行第一個答案,這很有用。例如:

    switch(true){ 
    case 1 == 2: 
        echo '1 == 2'; 
        break; 
    
    case 2 == 2: 
        echo '2 == 2'; 
        break; 
    
    case 3 == 3: 
        echo '3 == 3'; 
        break; 
    
    case 4 == 1: 
        echo '4 == 1'; 
        break; 
    } 
    

    輸出: 2 == 2

    無論是第二和第三種情況是真實的,但我們只得到第二個(其爲第一TRUE)。

    +1

    這就是「休息」的作用,刪除它並繼續! – 2016-02-03 04:50:39

    相關問題