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

这有什么区别吗

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

和这个?

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

检查variables是否包含空值时哪种forms更好? 有没有我应该知道的边缘情况? (我初始化所有的variables,所以不存在的variables不是问题。)

如果variables被初始化(你确实表示 – 虽然我不是100%确定这个问题是否在这个上下文中,如果这个variables没有被定义,这两个解决scheme可能会发出警告),它们在function上是相同的。 我认为===会稍微快一些,但是它会消除函数调用的开销。

这真的取决于你如何看待你的状况。

===是一个严格的数据比较。 NULL只有一个“值”,所以这个工作是为了与NULL(这是一个PHP常量的null值)进行比较

is_null正在检查variables是否为NULL数据types。

真的,这取决于你自己select。

true

false

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

摘要:🔸♦️🔸

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

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

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

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

我刚刚运行了一个快速的基准testing,每个testing一百万次。 is_null花了8秒钟完成; === null了1。

所以对is_null的调用比在我的电脑上调用===要慢0.000007s。

我会find一些更有用的优化。


我的代码:

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

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

is_null($var)$var===null …慢了大约14倍… 37.8 ms比2.6 ms。

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