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

2022-08-30 06:43:14

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

PHP有两个(我知道,如果你算上的话,还有三个)方法来确定一个值是否为空:和。我听说过,但没有得到证实,这更快,但在代码审查中,有人强烈建议我改用,因为它是专门为空评估目的而设计的。他也开始谈论数学什么的。isset()is_null()=== null=== nullis_null()

无论如何,明显较慢的事实也使我相信它比实际做得更多,并且可能是首选。有什么理由使用其中一个吗?总是首选吗?怎么样?is_null()=== nullisset()

作为可能不关闭此问题的附录,vs. ?似乎所有要做的就是抑制通知,所以除非你真的想要一个未定义变量的通知,否则有什么理由使用呢?如果您知道变量在当时已初始化,该怎么办?isset()is_null()isset()is_null()

最后,是否有任何数学理由更喜欢?关于空值不具有可比性?is_null()=== null


答案 1

和 之间在功能上绝对没有区别。is_null=== null

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

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

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

如果需要,您可以检查代码:is_identical_function()和php_is_type()对案例执行相同的操作。===is_nullIS_NULL


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

另请注意,即使值是 - 当它用于重载对象时,有时可能会返回这种情况,即如果对象定义了一个即使偏移量是返回的/方法(这实际上很常见,因为人们在/中使用)。isset()truenulloffsetExists__issettruenullarray_key_existsoffsetExists__isset


答案 2

如前所述,使用 和 之间存在时间差。做了一些快速测试,得到了这些结果:===is_null()

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

给出结果

测试使用 === 0.0090668201446533

使用 is_null() 0.013684034347534 进行测试

查看实际操作中的代码


推荐