这有什么不同......
if (is_null($var)) {
do_something();
}
这个?
if ($var === null) {
do_something();
}
检查变量是否包含null时,哪种形式更好?我应该注意哪些边缘情况? (我初始化所有变量,因此不存在的变量不是问题。)
答案 0 :(得分:89)
✅
是true
❌
是false
| isset | is_null | ===null | ==null | empty |
|-------|---------|---------|---------|---------|---------|
| null | ❌ | ✅ | ✅ | ✅ | ✅ |
| true | ✅ | ❌ | ❌ | ❌ | ❌ |
| false | ✅ | ❌ | ❌ | ✅ | ✅ |
| 0 | ✅ | ❌ | ❌ | ✅ | ✅ |
| 1 | ✅ | ❌ | ❌ | ❌ | ❌ |
| \0 | ✅ | ❌ | ❌ | ❌ | ❌ |
| unset | ❌ | ✅ | ✅ | ✅ | ✅ |
| "" | ✅ | ❌ | ❌ | ✅ | ✅ |
empty
相当于==null
is_null
相当于===null
isset
与is_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 ===)中打错字。