is_null($ var)和($ var === null)之间有什么区别?

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.)

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.

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

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

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.

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;

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');

is true

is false

        | isset   | is_null | ===null | ==null  | empty   |
|-------|---------|---------|---------|---------|---------|
|  null |    ❌   |    ✅   |    ✅   |    ✅  |    ✅   |
|  true |    ✅   |    ❌   |    ❌   |    ❌  |    ❌   |
| false |    ✅   |    ❌   |    ❌   |    ✅  |    ✅   |
|     0 |    ✅   |    ❌   |    ❌   |    ✅  |    ✅   |
|     1 |    ✅   |    ❌   |    ❌   |    ❌  |    ❌   |
|    \0 |    ✅   |    ❌   |    ❌   |    ❌  |    ❌   |
| unset |    ❌   |    ✅   |    ✅   |    ✅  |    ✅   |
|   ""  |    ✅   |    ❌   |    ❌   |    ✅  |    ✅   |

Summary: