我有一個關於PHP和NULL一個奇怪的問題,請參見下面的代碼:php爲空或空?
$a = '';
if($a == NULL) {
echo 'is null';
}
爲什麼我看到爲空?如果$a
是空的,那是一個錯誤嗎?謝謝。
我有一個關於PHP和NULL一個奇怪的問題,請參見下面的代碼:php爲空或空?
$a = '';
if($a == NULL) {
echo 'is null';
}
爲什麼我看到爲空?如果$a
是空的,那是一個錯誤嗎?謝謝。
什麼你要找的是:
if($variable === NULL) {...}
PHP對待NULL,假,和空字符串平等。
這個不是一個錯誤,但PHP的正常行爲。這是因爲PHP中的==
運算符不檢查類型。
'' == null == 0 == false
如果您還想檢查值具有相同的類型,使用===
代替。深入研究這種差異,請閱讀official documentation。
不,這不是一個錯誤。看一看在Loose comparisons with == table(第二個表),這顯示了每個值在第一列與其他列的值進行比較的結果是:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
在那裏,你可以看到一個空字符串""
與false
比較,0
,NULL
或""
將產生真實。
您可能想用is_null
[docs]代替,或者使用嚴格比較(第三個表格)。
鬆散的比較表似乎表明,比較0 ==「PHP」或「PHP」== 0都將產生真實。那裏發生了什麼? – Robert
@Robert:當轉換爲字符串時,不以數字開頭的字符串被轉換爲「0」:http://codepad.org/qi40SG3E。所以'(int)「php」== 0「。 –
@Robert:我的意思是*「投到**號碼**」時*。 –
檢查==
VS ===
'' == NULL
將返回true
0 == NULL
將返回true
false == null
將返回true
其中作爲
'' === NULL
將返回false
0 === NULL
會返回false
false === NULL
將返回false
如下表中所示,empty($foo)
相當於$foo==null
和is_null($foo)
具有$foo===null
相同的功能。該表還顯示了一些關於null
比較的棘手值。 (φ表示未初始化的變量。)
我從來不使用empty()
和is_null()
函數。使用簡單的比較不那麼模糊,更快和更清晰。
empty is_null
==null ===null isset array_key_exists
ϕ | T | T | F | F
null | T | T | F | T
"" | T | F | T | T
[] | T | F | T | T
0 | T | F | T | T
false | T | F | T | T
true | F | F | T | T
1 | F | F | T | T
\0 | F | F | T | T
如果使用==
,PHP把一個空字符串或數組作爲null
。要區分null
和empty
,請使用===
或is_null
。所以:
if($a === NULL)
或if(is_null($a))
if($ a === NULL) – Caster
假,你的條件只匹配未初始化和空'''$ variable'''。 你想要的其實是:'''$ variable == null'''(注意''== ==''') –
@ThomasLAURENT,這就是OP所要找的,他們想知道爲什麼'== null '是匹配空字符串,而不僅僅是null或undefined。 – Godwin
Oups我的錯誤,但你的最後一句話讓我認爲NULL,false,0和**嚴格相等**這是錯誤的,對於誤解抱歉。 –