Possible Duplicate:
What's the difference between is_null($var) and ($var === null)?
PHP has two (that I know of, and three if you count isset()
) methods to determine if a value is null: is_null()
and === null
. I have heard, but not confirmed, that === null
is faster, but in a code review someone strongly suggested that I use is_null()
instead as it is specifically designed for the null-evaluation purpose. He also started talking about math or something.
Anyway, the fact that is_null()
is apparently slower also leads me to believe that it's doing more than === null
does and is probably preferred. Is there any reason to use one or the other? Is one always preferred? What about isset()
?
As an addendum to possibly not get this question closed, what about isset()
vs. is_null()
? It seems that all isset()
will do is suppress the notice, so unless you actually want a notice for an undefined variable, any reason to use is_null()
instead? How about if you know the variable is initialized at the time?
Finally, is there any mathematical reason to prefer is_null()
over === null
? Something about null not being comparable?
I'm not able to say wether it's better to use
is_null
or=== null
. But be aware when usingisset
on arrays.They all have their places, though only isset() will avoid undefined variable warnings:
As stated by others, there is a time difference between using
===
andis_null()
. Did some quick testing and got these results:Gives the results
See the code in action
===
andis_null
is the same.According to this comment
is_null
is only 250ns slower. I think because a function is slower than an operator.The PHP documentation has a good discussion and experiments on
is_null, === null, isset
. Especially read the comment section.There is absolutely no difference in functionality between
is_null
and=== null
.The only difference is that
is_null
is a function and thusarray_map('is_null', $array)
.Personally, I use
null ===
whenever I can, as it is more consistent withfalse ===
andtrue ===
checks.If you want, you can check the code:
is_identical_function
(===
) andphp_is_type
(is_null
) do the same thing for theIS_NULL
case.The related
isset()
language construct checks whether the variable actually exists before doing thenull
check. Soisset($undefinedVar)
will not throw a notice.Also note that
isset()
may sometimes returntrue
even though the value isnull
- this is the case when it is used on an overloaded object, i.e. if the object defines anoffsetExists
/__isset
method that returnstrue
even if the offset isnull
(this is actually quite common, because people usearray_key_exists
inoffsetExists
/__isset
).