is_null($ x)vs $ x === PHP中的null

可能重复:
is_null($ var)和($ var === null)有什么区别?

PHP有两个(我知道的,三个如果计算isset() )方法来确定一个值是否为空: is_null()=== null 。 我听说过,但没有证实, === null更快,但在代码审查中,有人强烈build议我使用is_null()因为它专为空值评估目的而devise。 他还开始谈论math或什么的。

无论如何, is_null()显然慢的事实也使我相信,它比=== null做的更多,可能是首选。 有没有任何理由使用这个或另一个? 总是首选吗? 那么isset()呢?

作为可能不会得到这个问题closures的附录,那么isset()is_null()呢? 看来,所有isset()将做的是压制通知,所以除非你真的想要一个未定义的variables的通知,任何理由使用is_null()而不是? 如果你知道这个variables是在初始化的时候呢?

最后,是否有任何math原因喜欢is_null()超过=== null ? 关于null的东西不可比?

is_null=== null之间的function是完全没有区别的。

唯一的区别是is_null是一个函数,因此

  1. 稍微慢一点(函数调用开销)
  2. 可以用作callback,例如array_map('is_null', $array)

就我个人而言,我使用null === ,因为它更符合false ===true ===检查。

如果你想,你可以检查代码: is_identical_function=== )和php_is_typeis_null )对IS_NULL情况做同样的事情。


相关的isset()语言构造在进行null检查之前检查variables是否实际存在。 所以isset($undefinedVar)不会抛出通知。

还要注意,即使值为nullisset()有时也会返回true – 这是在重载对象上使用的情况,即如果对象定义了即使偏移量为null也返回trueoffsetExists / __isset方法这实际上是相当普遍的,因为人们在offsetExists / __isset使用array_key_exists )。

正如其他人所说,使用===is_null()之间有时间差。 做了一些快速testing,得到了这些结果:

 <?php //checking with === $a = array(); $time = microtime(true); for($i=0;$i<10000;$i++) { if($a[$i] === null) { //do nothing } } echo 'Testing with === ', microtime(true) - $time, "\n"; //checking with is_null() $time = microtime(true); for($i=0;$i<10000;$i++) { if(is_null($a[$i])) { //do nothing } } echo 'Testing with is_null() ', microtime(true) - $time; ?> 

给出结果

用===testing0.0090668201446533

使用is_null()0.013684034347534进行testing

看到行动中的代码

他们都有自己的位置,虽然只有isset()会避免未定义的variables警告:

 $ php -a Interactive shell php > var_dump(is_null($a)); PHP Notice: Undefined variable: a in php shell code on line 1 bool(true) php > var_dump($a === null); PHP Notice: Undefined variable: a in php shell code on line 1 bool(true) php > var_dump(isset($a)); bool(false) php > 

如果variables可能未定义,则需要isset() 。 当variables未定义或=== null (是的,这丑陋的)它返回false。 如果variables或数组元素不存在,只有isset()empty()不会引发E_NOTICE。

is_null=== null之间没有区别。 我认为===更好,但是当你需要使用call_user_func ,你必须使用is_null

===is_null是一样的。

根据这个评论 is_null只有250ns慢。 我认为是因为一个函数比一个运算符慢。

PHP文档在is_null, === null, isset上有很好的讨论和实验。 特别阅读评论部分。

我不能说,使用is_null=== null更好。 但是在数组上使用isset时要注意。

 $a = array('foo' => null); var_dump(isset($a['foo'])); // false var_dump(is_null($a['foo'])); // true var_dump(array_key_exists('foo', $a)); // true