2016-01-07 61 views
2

我現在遇到一個很奇怪的情況,在PHP IFSwitch報表工作時。任何人都可以解釋爲什麼下面的IF條件正在成爲現實,而不是執行ELSE塊。 Switch聲明的情況也是如此,它不執行default塊。PHP在IF怪現狀和switch敘述

感謝您的時間:)

$error = TRUE; 

if ($error == FALSE OR $error == 'stringValue') { 
    echo 'Inside IF'; 
} else { 
    echo 'Inside ELSE'; 
} 

switch($error){ 
    case FALSE: 
    case 'stringValue': 
     echo 'Inside First'; 
     break; 

    default: 
     echo 'Inside Default'; 
     break; 
} 
+4

'真== 'string''結果TRUE;,'真===' string''在'結果FALSE' – Daan

+1

由於真== 「somthing」,特別適用於OR運營商。 – devpro

+0

@devpro謝謝:) –

回答

1

它剛剛發生這一行的,因爲:

if ($error == FALSE OR $error == 'stringValue') { 
// your stuff 
} 

在這裏定義$誤差爲真,並使用OR運算符。

$error == 'stringValue'也意味着一些即將實現。

一個基本的例子:

$error = true; 

if ($error == "somthing") { 
    echo 'Inside IF'; 
} else { 
    echo 'Inside ELSE'; 
} 

它將始終打印「內部IF」但爲什麼呢?只是看這個例子:

if (true == "somthing") { 
    echo 'Inside IF'; 
} else { 
    echo 'Inside ELSE'; 
} 

都將被視爲相同。嘗試一下。

+1

所以,你可以用'===比較'在if else語句,但會是這樣還可以帶開關的情況下?或者switch case總是與'=='比較? – KhorneHoly

+0

@ KhorneHoly爲什麼你會在開關中使用布爾值?並沒有根據文件:'注意開關/案件確實鬆動比較.' – Daan

+0

@ khorneHoly謝謝朋友:) –

1

試試這個

<?php 
$error = TRUE; 

if($error === FALSE || $error === 'stringValue') { 
echo 'Inside IF'; 
} else { 
echo 'Inside ELSE'; 
} 

switch($error){ 
case FALSE: 
//case 'stringValue': 
    echo 'Inside First'; 
    break; 

default: 
    echo 'Inside Default'; 
    break; 
} 

?> 

,你可以做這個事情也是在你的代碼 -

只是讓$錯誤= 'TRUE';作爲一個字符串,因爲它在這個時候是布爾值。

+0

是的,我做了,它的工作原理。謝謝 :)。 –

+0

不要忘記通過投票讚賞。 –

1

這是該類型。類型雜耍後==檢查相等。但如果你想檢查相同的類型,你應該使用===。如果兩個操作符都是相同類型,則返回true。所以你可以使用===而不是==。
不喜歡這個 -

$error = TRUE; 

if ($error === FALSE OR $error === 'stringValue') { 
    echo 'Inside IF'; 
} else { 
    echo 'Inside ELSE'; 
} 

它顯示內部ELSE。
欲瞭解更多信息,請查看它 - http://php.net/manual/en/language.operators.comparison.php

0

如前面的答覆中提到,==操作符不匹配的類型,但只有價值,因此,如果使用不同類型2點的值進行比較PHP正試圖轉換另一個類型的變量之一。

同樣的事情被應用於使用開關。我測試這個選項來將$ error轉換爲字符串類型。

$error = TRUE; 

if ($error == FALSE OR strval($error) == 'stringValue') { 
    echo 'Inside IF; 
} else { 
    echo 'Inside ELSE'; 
} 

switch(strval($error)){ 
    case FALSE: 
    case 'stringValue': 
    echo 'Inside First'; 
    break; 

    case TRUE: 
    echo 'Inside true'; break; 
    default: 
    echo 'Inside Default'; 
    break; 
} 

輸出 內部ELSE內部真