php is null when empty? [duplicate]
I have a question regarding NULL
in PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Why do I see is null when $a
is an empty string? Is that a bug?
Solution 1:
What you're looking for is:
if($variable === NULL) {...}
Note the ===
.
When use ==
, as you did, PHP treats NULL, false, 0, the empty string, and empty arrays as equal.
Solution 2:
As is shown in the following table, empty($foo)
is equivalent to $foo==null
and is_null($foo)
has the same function of $foo===null
. The table also shows some tricky values regarding the null
comparison. (ϕ denotes an uninitialized variables. )
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
Solution 3:
check ==
vs ===
'' == NULL
would return true0 == NULL
would return truefalse == null
would return true
where as
'' === NULL
would return false0 === NULL
would return falsefalse === NULL
would return false
Solution 4:
No it's not a bug. Have a look at the Loose comparisons with == table (second table), which shows the result of comparing each value in the first column with the values in the other columns:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
There you can see that an empty string ""
compared with false
, 0
, NULL
or ""
will yield true.
You might want to use is_null
[docs] instead, or strict comparison (third table).
Solution 5:
This is not a bug but PHP normal behavior. It happens because the ==
operator in PHP doesn't check for type.
'' == null == 0 == false
If you want also to check if the values have the same type, use ===
instead. To study in deep this difference, please read the official documentation.