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?
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
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).
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.
NULL stands for a variable without value. To check if a variable is NULL you can either use is_null($var) or the comparison (===) with NULL. Both ways, however, generate a warning if the variable is not defined. Similar to isset($var) and empty($var), which can be used as functions.
var_dump(is_null($var)); // true
var_dump($var === null); // true
var_dump(empty($var)); // true
Read more in How to check if a variable is NULL in PHP?
Use empty - http://php.net/manual/en/function.empty.php.
Example:
$a = '';
if(empty($a)) {
echo 'is empty';
}