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

kij*_*jin 77 php

这有什么区别......

if (is_null($var)) {
    do_something();
}
Run Code Online (Sandbox Code Playgroud)

还有这个?

if ($var === null) {
    do_something();
}
Run Code Online (Sandbox Code Playgroud)

检查变量是否包含null时哪种形式更好?我应该注意哪些边缘情况?(我初始化所有变量,因此不存在的变量不是问题.)

PHP*_*Pst 92

?true

?false

        | isset   | is_null | ===null | ==null  | empty   |
|-------|---------|---------|---------|---------|---------|
|  null |    ?   |    ?   |    ?   |    ?  |    ?   |
|  true |    ?   |    ?   |    ?   |    ?  |    ?   |
| false |    ?   |    ?   |    ?   |    ?  |    ?   |
|     0 |    ?   |    ?   |    ?   |    ?  |    ?   |
|     1 |    ?   |    ?   |    ?   |    ?  |    ?   |
|    \0 |    ?   |    ?   |    ?   |    ?  |    ?   |
| unset |    ?   |    ?   |    ?   |    ?  |    ?   |
|   ""  |    ?   |    ?   |    ?   |    ?  |    ?   |
Run Code Online (Sandbox Code Playgroud)

摘要:♦️

  • empty 相当于 ==null
  • is_null 相当于 ===null
  • isset是的倒数is_null===null

  • 我真的很喜欢这张桌子. (12认同)
  • 让第一列名为`$ v`代表一些通用变量,然后其他`isset($ v)`,`is_null($ v)`,`$ v === null`等等 (3认同)
  • @Pacerier它清楚地说它们是等价的,所以没有功能差异. (3认同)

Cra*_*ige 27

如果变量已初始化(您确实指出了 - 虽然我不是100%确定这是否在此上下文中是否重要.如果未定义变量,两个解决方案都可能会发出警告),它们在功能上是相同的.我认为它===会略微加快,因为它消除了函数调用的开销.

这真的取决于你如何看待自己的状况.

===是用于严格的数据比较.NULL只有一个'value',所以这适用于与NULL进行比较(这是null'值'的PHP常量)

is_null 检查变量是否为NULL数据类型.

这取决于你选择的,真的.

  • 我更喜欢`is_null`变体,因为很容易意外地使用`== null`而不是`=== null`.由于`== null`与`empty`相同(参见其他答案),这为程序员(尤其是初级和中级)错误带来了比简单易读的`is_null`更大的潜力. (3认同)
  • 感谢您解释按值比较和按类型比较. (2认同)

Ish*_*Ish 16

两者完全相同,我使用is_null它是因为它使我的代码更具可读性

  • 我觉得`is_null`实际上不太清楚.虽然它可以很好地阅读,但是`$ v === null`毫无疑问地表明比较是用严格的语义完成的,但是使用`is_null($ v)`,一些编码器会怀疑它是否使用`===`或` ==`语义. (10认同)
  • 值得一读的是http://www.php.net/manual/en/function.is-null.php#84161 (8认同)
  • @ goat,ish1301,此外,`is_null`可以完全[删除或重新定义](http://php.net/manual/en/function.runkit-function-remove.php),而`=== null`将总是工作. (4认同)
  • 虽然起初===可能会更快,但PHP优化器应该可以解决这个问题. (3认同)

goa*_*oat 7

如果php有这么多的is_foo()类型函数似乎是多余的,当你可以使用标准的比较运算符时,请考虑以编程方式调用函数.

$arrayOfNullValues = array_filter($myArray, 'is_null');
Run Code Online (Sandbox Code Playgroud)


lon*_*day 5

我刚刚运行了一个快速基准测试,测试了每个测试的一百万次迭代。is_null耗时 8 秒完成;=== null拿了 1。

所以调用 tois_null===在我的计算机上调用 to 慢 0.000007s 。

我会发现一些更有用的优化。


我的代码:

<?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;
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,PHP/7 似乎已经解决了这个问题,并且性能现在几乎相同;事实上,在我的电脑上,在 7.1.9 Win32 下,`is_null()` 稍微快一些。 (2认同)