What's the difference between is_null($var) and ($var === null)?

Php

Php Problem Overview


Is there any difference between this...

if (is_null($var)) {
    do_something();
}

and this?

if ($var === null) {
    do_something();
}

Which form is better when checking whether or not a variable contains null? Are there any edge cases I should be aware of? (I initialize all my variables, so nonexistent variables are not a problem.)

Php Solutions


Solution 1 - Php

is true

is false

        | isset   | is_null | ===null | ==null  | empty   |
|-------|---------|---------|---------|---------|---------|
|  null |    ❌   |    ✅   |    ✅   |    ✅  |    ✅   |
|  true |    ✅   |    ❌   |    ❌   |    ❌  |    ❌   |
| false |    ✅   |    ❌   |    ❌   |    ✅  |    ✅   |
|     0 |    ✅   |    ❌   |    ❌   |    ✅  |    ✅   |
|     1 |    ✅   |    ❌   |    ❌   |    ❌  |    ❌   |
|    \0 |    ✅   |    ❌   |    ❌   |    ❌  |    ❌   |
| unset |    ❌   |    ✅   |    ✅   |    ✅  |    ✅   |
|   ""  |    ✅   |    ❌   |    ❌   |    ✅  |    ✅   |
Summary:♦️
  • empty is equivalent to ==null
  • is_null is equivalent to ===null
  • isset is inverse of is_null and ===null

An important point is empty and isset do not trigger a PHP warning if their parameter is an undefined variable. So if you expect that the variable or array index which you are testing upon is always defined, use the operator otherwise use the function.

Solution 2 - Php

Provided the variable is initialized (which you did indicate - though I'm not 100% sure if this matters in this context or not. Both solutions might throw a warning if the variable wasn't defined), they are functionally the same. I presume === would be marginally faster though as it removes the overhead of a function call.

It really depends on how you look at your condition.

=== is for a strict data comparison. NULL has only one 'value', so this works for comparing against NULL (which is a PHP constant of the null 'value')

is_null is checking that the variable is of the NULL data type.

It's up to you which you choose, really.

Solution 3 - Php

Both are exactly same, I use is_null because it makes my code more readable

Solution 4 - Php

If it seems redundant for php to have so many is_foo() type functions, when you can just use a standard comparison operators, consider programatically called functions.

$arrayOfNullValues = array_filter($myArray, 'is_null');

Solution 5 - Php

I've just run a quick benchmark, testing a million iterations of each. is_null took 8 seconds to complete; === null took 1.

So a call to is_null is 0.000007s slower than a call to === on my computer.

I'd find something more useful to optimise.


My code:

<?php

$start = time();
$var = null;

for ($i = 1000000; $i--; ) {
    is_null($var);
}

echo time() - $start;

$start = time();

for ($i = 1000000; $i--; ) {
    $var === null;
}

echo time() - $start;

Solution 6 - Php

I would use the built in PHP function over the operator comparison every time.

Solution 7 - Php

One thing people often forget to mention in this discussion is that if you are all about strict type checking, is_null will help you to never make a typo in your comparison operators (== vs ===).

Solution 8 - Php

is_null($var) is about 14 times slower than $var===null... 37.8 ms vs. 2.6 ms.

But actually I don't know why.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkijinView Question on Stackoverflow
Solution 1 - PhpHandsome NerdView Answer on Stackoverflow
Solution 2 - PhpCraigeView Answer on Stackoverflow
Solution 3 - PhpIshView Answer on Stackoverflow
Solution 4 - PhpgoatView Answer on Stackoverflow
Solution 5 - PhplonesomedayView Answer on Stackoverflow
Solution 6 - PhpMichael IrigoyenView Answer on Stackoverflow
Solution 7 - PhpOgier SchelvisView Answer on Stackoverflow
Solution 8 - PhpFloernView Answer on Stackoverflow