在PHP中,
is_null
和==null
之间有什么区别?它们何时会返回true?is_null
等同于 === null
。当变量为null
(或未设置)时,两者都返回true。
请注意,我使用的是 ===
而不是 ==
。 ===
比较类型和值。
is_null()
返回 true
,但也会抛出“注意:未定义的变量”错误。为了避免这种情况,您可以使用等效的 !isset($var)
,唯一的缺点是您只能将变量传递给 isset()
。 - Gras Doubleisset($undefined)
和 is_null($undefined)
的确切实现方式,那么通过阅读源代码很容易就能得出答案。如果它像鸭子一样嘎嘎叫,走路也像鸭子一样。 - Justin Mitchell==
和===
之间的区别,这个答案会更好,因为OP问到了==
。请参考Daniel Ribeiro的答案,其中提供了一些测试用例来帮助展示它们之间的差异。此外,还可以参考dleiftah的答案,其中提供了链接到详细演示差异的图表。 - ToolmakerSteve这样你就能更好地理解:
$a = null;
$b = 0;
is_null($a) // TRUE
$a == null // TRUE
$a === null // TRUE
is_null($b) // FALSE
$b == null // TRUE
$b === null // FALSE
===null
是PHP发明者Rasmus Lerdorf推荐的。Rasmus表示,与isset
的测试相比,测试null的速度更快。他的建议足以让我们认真考虑这种差异。如果您在一个Web页面请求中有一个小循环多次执行相同的代码,则差异将非常显着。
更新:一些is_null和严格比较的速度测试:
PHP 5.5.9
is_null - float(2.2381200790405)
=== - float(1.0024659633636)
PHP 7.0.0-dev
is_null - float(1.4121870994568)
=== - float(1.4577329158783)
isset
有不同的含义。 - ToolmakerSteveisset
和===null
之间速度差异的,这并不能帮助我们决定是否使用is_null
或===null
,因为这是这个问题的主题。(以防有人没有仔细阅读!) - ToolmakerSteve==
不会检查类型,因此在某些情况下,类似于字符串 ''
或字符串 'null'
可能会被认为等于 null。
使用三个等号 ===
,不仅可以检查两个值是否相等,还可以检查它们是否是相同的类型。