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

时间:2011-01-11 20:59:34

标签: php

这有什么不同......

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

这个?

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

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

8 个答案:

答案 0 :(得分:89)

true

false

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

要点:♦️

  • empty相当于==null
  • is_null相当于===null
  • issetis_null===null
  • 相反

答案 1 :(得分:26)

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

这实际上取决于你如何看待自己的状况。

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

is_null正在检查变量是否为NULL数据类型。

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

答案 2 :(得分:16)

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

答案 3 :(得分:7)

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

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

答案 4 :(得分:4)

我只是运行一个快速基准测试,每个测试一百万次迭代。 is_null花了8秒钟完成; === null获得了1。

因此,对is_null的调用比在我的计算机上调用===慢0.000007秒。

我会找到更有用的优化方法。


我的代码:

<?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;

答案 5 :(得分:1)

我每次都会在运算符比较中使用内置的PHP函数。

答案 6 :(得分:0)

is_null($var)$var===null慢约14倍... 37.8 ms与2.6 ms相比。

但实际上我不知道为什么。

答案 7 :(得分:0)

人们在此讨论中经常忘记提及的一件事是,如果您只关注严格的类型检查,is_null将帮助您永远不会在比较运算符(== vs ===)中打错字。