两者之间有什么区别吗?
if (is_null($var)) {
do_something();
}
还有这个?
if ($var === null) {
do_something();
}
检查变量是否包含空值时,哪种形式更好?我应该注意哪些极端情况?(我初始化了所有变量,因此不存在的变量不是问题。)
Answers:
只要变量已初始化(您确实已指出-尽管我不确定100%是否在此上下文中重要。如果未定义变量,两种解决方案都可能会发出警告),它们在功能上是相同的。我认为===这会稍微快一些,尽管它消除了函数调用的开销。
这实际上取决于您如何看待自己的状况。
===用于严格的数据比较。NULL只有一个“值”,因此可与NULL(这是null“值”的PHP常量)进行比较。
is_null 正在检查变量是否为NULL数据类型。
真正取决于您的选择。
is_null变体,因为它很容易被意外使用== null而不是=== null。由于== null与empty(请参阅其他答案)相同,因此与简单易读相比,这为程序员(尤其是初级和中级)错误带来了更大的潜力is_null。
✅ 是 true
❌ 是 false
| isset | is_null | ===null | ==null | empty |
|-------|---------|---------|---------|---------|---------|
| null | ❌ | ✅ | ✅ | ✅ | ✅ |
| true | ✅ | ❌ | ❌ | ❌ | ❌ |
| false | ✅ | ❌ | ❌ | ✅ | ✅ |
| 0 | ✅ | ❌ | ❌ | ✅ | ✅ |
| 1 | ✅ | ❌ | ❌ | ❌ | ❌ |
| \0 | ✅ | ❌ | ❌ | ❌ | ❌ |
| unset | ❌ | ✅ | ✅ | ✅ | ✅ |
| "" | ✅ | ❌ | ❌ | ✅ | ✅ |
empty 相当于 ==nullis_null 相当于 ===nullisset是is_null和的逆===null$v代表一些通用的变量,然后其他人isset($v),is_null($v),$v===null等等
isset不会抱怨未定义的变量,它将返回false。使用is_null或=== null将导致通知。
两者完全相同,我使用is_null是因为它使我的代码更具可读性
is_null实际上不太清楚。尽管它看起来不错, $v === null但毫无疑问,比较是使用严格的语义完成的,但是使用is_null($v),有些编码人员会怀疑它是使用===还是==语义。
如果php具有这么多is_foo()类型的函数似乎是多余的,那么当您可以仅使用标准比较运算符时,请考虑以编程方式调用的函数。
$arrayOfNullValues = array_filter($myArray, 'is_null');
$arrayWithoutNullValues然后将存储仅包含 null值的数组。
我刚刚运行了一个快速的基准测试,每个基准测试进行了一百万次迭代。is_null花了8秒完成;=== null拿了1。
因此,拨打电话的is_null时间比===在我的计算机上拨打电话慢0.000007s 。
我会发现更有用的优化方法。
我的代码:
<?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;
is_null()在7.1.9 Win32下我的计算机中的速度稍快。
我每次都会在运算符比较中使用内置的PHP函数。
人们在此讨论中经常忘记提及的一件事是,如果您只关注严格的类型检查,is_null则将永远帮助您避免在比较运算符中打错字(== vs ===)。
===运算符会更快,因为它不是显式函数……但是我感到一两次惊讶。