php is_null($var)和($var === null)之间有什么区别?

wz3gfoph  于 2022-12-10  发布在  PHP
关注(0)|答案(8)|浏览(140)

这跟...

if (is_null($var)) {
    do_something();
}

还有这个?

if ($var === null) {
    do_something();
}

检查变量是否包含空值时,哪种形式更好?是否有我应该注意的边缘情况?(我初始化了所有变量,因此不存在的变量不是问题。)

zrfyljdw

zrfyljdw1#

如果empty()isset()的参数是一个未定义的变量,它们不会触发PHP警告。在大多数情况下,这样的警告对于查明错误是很有用的。所以,只有当你认为你的变量可以被合法地未定义时,才使用这些函数。数组索引通常会发生这种情况。
就是true
false

|  isset   | is_null | === null | == null | empty   |
|-------|----------|---------|----------|---------|---------|
| unset |    ❌   |    ✅   |    ✅    |    ✅  |    ✅   |
|  null |    ❌   |    ✅   |    ✅    |    ✅  |    ✅   |
|  true |    ✅   |    ❌   |    ❌    |    ❌  |    ❌   |
| false |    ✅   |    ❌   |    ❌    |    ✅  |    ✅   |
|     0 |    ✅   |    ❌   |    ❌    |    ✅  |    ✅   |
|     1 |    ✅   |    ❌   |    ❌    |    ❌  |    ❌   |
|    \0 |    ✅   |    ❌   |    ❌    |    ❌  |    ❌   |
|    "" |    ✅   |    ❌   |    ❌    |    ✅  |    ✅   |
|    [] |    ✅   |    ❌   |    ❌    |    ✅  |    ✅   |

总结:🔸◇️🔸

  • empty等效于== null
  • is_null等效于=== null
  • issetis_null=== null的倒数
roqulrg3

roqulrg32#

如果变量被初始化(您已经指出了--尽管我不能100%确定这在本文中是否重要。如果变量没有被定义,两种解决方案都可能抛出警告),它们在功能上是相同的。我认为===会稍微快一些,因为它消除了函数调用的开销。
这真的取决于你如何看待你的病情。
===用于严格的数据比较。NULL只有一个'value',所以这适用于与NULL进行比较(NULL是一个空'value'的PHP常量)
is_null正在检查变量的数据类型是否为NULL。
这取决于你的选择,真的。

u91tlkcl

u91tlkcl3#

两者完全相同,我使用is_null是因为它使代码更可读

cfh9epnr

cfh9epnr4#

如果php有这么多is_foo()类型的函数似乎是多余的,当你可以只使用一个标准的比较运算符时,考虑一下程序调用的函数。

$arrayOfNullValues = array_filter($myArray, 'is_null');
a9wyjsp7

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

dxpyg8gm6#

我每次都会使用PHP内置的函数进行运算符比较。

7y4bm7vi

7y4bm7vi7#

有一件事人们在讨论中经常忘记提及,那就是如果您非常注重严格的类型检查,那么is_null将帮助您永远不会在比较运算符(== vs ===)中出现错别字。

l5tcr1uw

l5tcr1uw8#

is_null($var)$var===null慢大约14倍...... 37.8毫秒对2.6毫秒。
但其实我也不知道为什么。

相关问题