2013-11-22 57 views
0

今天我遇到了一個問題,(我設法解決)。但是,我不明白爲什麼這樣。PHP開關狀態捕捉不匹配的條件

我有一個這樣的開關狀態:

switch($message['approval_status']){ 
    case self::APPROVED: 
     $state['approved'] = true; 
     break; 
    // other irrelevant conditions 
    default: 
     break; 
} 

const APPROVED = 2 

我在2個變量傳遞,

如果我要與

兩次使用此功能,一旦

$message['approval_status'] = 1另一個與

$message['approval_status'] = true

上面的switch語句按照預期傳遞整數,即轉到默認條件。但是,具有$message['approval_status'] = true的變量被case self::APPROVED:捕獲,即使self::APPROVED = 2

爲什麼會這樣?

回答

0

爲了比較兩者,PHP必須將「2」轉換爲布爾值(switch語句使用寬鬆比較,因此不同類型的值必須轉換爲單一類型)。任何非零值都會轉換爲「true」。

+0

所以,沒有'==='開關這樣的事情? –

+0

這是正確的參見:http://stackoverflow.com/questions/3525614/make-switch-use-comparison-not-comparison-in-php –

+0

爲什麼它會轉換爲布爾雖然?這是一個int與bool測試,不應該將bool轉換爲int嗎? –

0

您的比較正在評估布爾值(true)和非零值(也是true)。測試是通過true/false來完成的,所以它通過了。