这跟...
if (is_null($var)) { do_something(); }
还有这个?
if ($var === null) { do_something(); }
检查变量是否包含空值时,哪种形式更好?是否有我应该注意的边缘情况?(我初始化了所有变量,因此不存在的变量不是问题。)
zrfyljdw1#
如果empty()和isset()的参数是一个未定义的变量,它们不会触发PHP警告。在大多数情况下,这样的警告对于查明错误是很有用的。所以,只有当你认为你的变量可以被合法地未定义时,才使用这些函数。数组索引通常会发生这种情况。✅就是true❌是false
empty()
isset()
✅
true
❌
false
| isset | is_null | === null | == null | empty | |-------|----------|---------|----------|---------|---------| | unset | ❌ | ✅ | ✅ | ✅ | ✅ | | null | ❌ | ✅ | ✅ | ✅ | ✅ | | true | ✅ | ❌ | ❌ | ❌ | ❌ | | false | ✅ | ❌ | ❌ | ✅ | ✅ | | 0 | ✅ | ❌ | ❌ | ✅ | ✅ | | 1 | ✅ | ❌ | ❌ | ❌ | ❌ | | \0 | ✅ | ❌ | ❌ | ❌ | ❌ | | "" | ✅ | ❌ | ❌ | ✅ | ✅ | | [] | ✅ | ❌ | ❌ | ✅ | ✅ |
empty
== null
is_null
=== null
isset
roqulrg32#
如果变量被初始化(您已经指出了--尽管我不能100%确定这在本文中是否重要。如果变量没有被定义,两种解决方案都可能抛出警告),它们在功能上是相同的。我认为===会稍微快一些,因为它消除了函数调用的开销。这真的取决于你如何看待你的病情。===用于严格的数据比较。NULL只有一个'value',所以这适用于与NULL进行比较(NULL是一个空'value'的PHP常量)is_null正在检查变量的数据类型是否为NULL。这取决于你的选择,真的。
===
u91tlkcl3#
两者完全相同,我使用is_null是因为它使代码更可读
cfh9epnr4#
如果php有这么多is_foo()类型的函数似乎是多余的,当你可以只使用一个标准的比较运算符时,考虑一下程序调用的函数。
$arrayOfNullValues = array_filter($myArray, 'is_null');
a9wyjsp75#
我刚刚运行了一个快速的基准测试,对每个.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;
dxpyg8gm6#
我每次都会使用PHP内置的函数进行运算符比较。
7y4bm7vi7#
有一件事人们在讨论中经常忘记提及,那就是如果您非常注重严格的类型检查,那么is_null将帮助您永远不会在比较运算符(== vs ===)中出现错别字。
l5tcr1uw8#
is_null($var)比$var===null慢大约14倍...... 37.8毫秒对2.6毫秒。但其实我也不知道为什么。
is_null($var)
$var===null
8条答案
按热度按时间zrfyljdw1#
如果
empty()
和isset()
的参数是一个未定义的变量,它们不会触发PHP警告。在大多数情况下,这样的警告对于查明错误是很有用的。所以,只有当你认为你的变量可以被合法地未定义时,才使用这些函数。数组索引通常会发生这种情况。✅
就是true
❌
是false
总结:🔸◇️🔸
empty
等效于== null
is_null
等效于=== null
isset
是is_null
和=== null
的倒数roqulrg32#
如果变量被初始化(您已经指出了--尽管我不能100%确定这在本文中是否重要。如果变量没有被定义,两种解决方案都可能抛出警告),它们在功能上是相同的。我认为
===
会稍微快一些,因为它消除了函数调用的开销。这真的取决于你如何看待你的病情。
===
用于严格的数据比较。NULL只有一个'value',所以这适用于与NULL进行比较(NULL是一个空'value'的PHP常量)is_null
正在检查变量的数据类型是否为NULL。这取决于你的选择,真的。
u91tlkcl3#
两者完全相同,我使用
is_null
是因为它使代码更可读cfh9epnr4#
如果php有这么多is_foo()类型的函数似乎是多余的,当你可以只使用一个标准的比较运算符时,考虑一下程序调用的函数。
a9wyjsp75#
我刚刚运行了一个快速的基准测试,对每个.
is_null
进行了一百万次迭代,完成这个测试需要8秒;=== null
取1.因此,在我的计算机上调用
is_null
比调用===
慢0.000007秒。我会找到更有用的东西来优化。
我的代码:
dxpyg8gm6#
我每次都会使用PHP内置的函数进行运算符比较。
7y4bm7vi7#
有一件事人们在讨论中经常忘记提及,那就是如果您非常注重严格的类型检查,那么
is_null
将帮助您永远不会在比较运算符(== vs ===)中出现错别字。l5tcr1uw8#
is_null($var)
比$var===null
慢大约14倍...... 37.8毫秒对2.6毫秒。但其实我也不知道为什么。