The empty() function returns true if the value of a variable evaluates to false . This could mean the empty string, NULL , the integer 0 , or an array with no elements. On the other hand, is_null() will return true only if the variable has the value NULL .
The is_null() function checks whether a variable is NULL or not. This function returns true (1) if the variable is NULL, otherwise it returns false/nothing.
NULL essentially means a variable has no value assigned to it; false is a valid Boolean value, 0 is a valid integer value, and PHP has some fairly ugly conversions between 0 , "0" , "" , and false . Show activity on this post. Null is nothing, False is a bit, and 0 is (probably) 32 bits.
The isset() function is an inbuilt function in PHP which checks whether a variable is set and is not NULL. This function also checks if a declared variable, array or array key has null value, if it does, isset() returns false, it returns true in all other possible cases.
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.
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
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With