2011-03-28 65 views
1

有一些問題在PHP布爾值,將不勝感激,如果有人可以解釋爲什麼下面不工作PHP和花式布爾

$var = "asdas"; 

    // or this if(!isset($var) || ($var && !$var)){ 
    if(!isset($var) || (is_bool($var) != true && is_bool($var) != false)){ 
     echo "is not a boolean"; 
    }else{ 
     echo "it IS a boolean"; 
    } 

輸出始終 - >「這是一個布爾」

在此先感謝


感謝您的幫助,是啊,我知道我做了什麼(學校男孩錯誤)。

解決方案

$var = "asda"; 
if(!isset($var) || (is_bool($var) === false)){ 
    echo "it not a boolean"; 
}else{ 
    echo "is IS a boolean"; 
} 
+1

爲什麼倒票?任何解釋? – Treffynnon 2011-03-28 14:05:55

+1

嗯......爲什麼否定解決方案中的邏輯?當你稍後再回來時,它會讓閱讀變得更加困難。也許看看我在下面的答案中提供的解決方案,以實現同樣目標的「更好」方式。 – Treffynnon 2011-03-28 14:15:21

+0

爲什麼我否定邏輯的原因是因爲我只想在我的實際代碼中做一些事情,當它的假...如果是真的 - >只是繼續。無論如何感謝 – Stevanicus 2011-03-28 14:21:47

回答

3

的問題是在這裏:

(is_bool($var) != true && is_bool($var) != false) 

is_bool()返回或者truefalse,這樣你就省去了第一echo

你的代碼改成這樣:

$var = "asdas"; 

if(isset($var) and is_bool($var)){ 
    echo "it IS a boolean"; 
}else{ 
    echo "is not a boolean"; 
} 
3

is_bool($var)永遠是真或假。

換句話說,(is_bool($var) != true && is_bool($var) != false)將始終評估爲 true false。

+2

簡單但完整的答案:-) is_bool檢查變量的類型。所以變量的類型是布爾型或不是 - >二進制結果^^ – strauberry 2011-03-28 14:02:41

+1

實際上,它總是評估爲「false」,而不是「true」。 – jeroen 2011-03-28 14:06:21

+0

沒錯,當然是。傻我。 – awm 2011-03-28 14:08:05

3
(is_bool($var) != true && is_bool($var) != false) 

這個作用:

聲明應該返回trueONLY如果$var不是一個布爾 $ VAR IS一個布爾值。

正如你所想象的,$var不能是一個布爾值,並在同一時間是一個布爾值。 (好像是$var有某種人格障礙的:))

2
(!isset($var) || (is_bool($var) != true && is_bool($var) != false)) 

(!isset($var) || (!is_bool($var) && is_bool($var))) 

(!isset($var) || false) 

$var被設定結果總是false

+0

+1這是最清楚的答案。 – awm 2011-03-28 14:10:59