2012-09-02 41 views
1

OK,首先,這是一個非常特殊的問題。我在PHP上工作了很長時間,我不知道爲什麼會發生這種情況。PHP如果然後和switch語句不起作用

我有一個函數adminUpdate。這個函數將返回true。我設置它總是返回真正的測試。

然後我有功能拿這個結果。

static function result2JSON($result,$options = array()) { 

     if($result == "permission") { 
      echo "permission"; 
     } 

     if($result == true) { 
      echo "true"; 
     } 


     switch ($result) { 
      case 'permission': 
       die($result."xxx permission"); 
       $json = self::setJSON("Permission"); 
       break; 
      case 'exist': 
       $json = self::setJSON("Exist"); 
       break; 
      case false: 
       $json = self::setJSON("Error"); 
       break; 
      case "": 
       $json = self::setJSON("Error"); 
       break; 
      case 1 : 
       $json = self::setJSON("OK"); 
       break; 
      case true: 
       $json = self::setJSON("OK"); 
       break; 
      default: 
       $json = self::setJSON("OK"); 
       break; 
     } 


     $json = array_merge($json,$options); 


     return $json; 

    } 

這些「Echo」用於測試這種情況。 因此,在此函數拍攝之前,$ result always = true。

但這輸出我:

permissiontrueResult = 1 IN permission section 

這意味着$結果=權限,然後==真,然後在開關==「許可」。 這是爲什麼?

+1

使用''===比較值,或'否則,如果' – mask8

+0

感謝球員們,現在我知道了,這種情況下不能使用開關,因爲它混合了真正的| false |串。這種情況必須是|如果|否則,如果 –

回答

1

如果您嘗試將它們視爲布爾值,則其中的東西的字符串評估爲true。 (。好吧,好吧,字符串「0」的值爲False PHP是怪異)

所以,如果你想看看一個變量實際上是真實的,你必須使用一個比較還檢查類型:

if ($result === "permission") { ... } 

if ($result === True) { ... } 
0

你應該===

+1

-1不解釋原因。 – Kermit

+0

@njk閱讀我的答案應該爲智能閱讀器提供足夠的信息,並在手冊中閱讀更多信息(或者,他們可以詢問)。當答案無用時應該點擊-1。現在,是嗎? – alfasin

+0

向下投票是主觀的。我覺得你的回答太簡單了,沒有提供'爲什麼',只是'什麼'。也許可以將OP引導至比較運算符? – Kermit