is_null

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

is_null 查找变量是否为 null

描述

is_null(mixed $value): bool

查找给定的变量是否为 null

参数

value

要评估的变量。

返回值

如果 valuenull,则返回 true,否则返回 false

示例

示例 #1 is_null() 示例

<?php

error_reporting
(E_ALL);

$foo = NULL;
var_dump(is_null($inexistent), is_null($foo));

?>
Notice: Undefined variable: inexistent in ...
bool(true)
bool(true)

参见

  • The null 类型
  • isset() - 确定变量是否已声明且不为 null
  • is_bool() - 查找变量是否为布尔值
  • is_numeric() - 查找变量是否为数字或数字字符串
  • is_float() - 查找变量的类型是否为浮点数
  • is_int() - 查找变量的类型是否为整数
  • is_string() - 查找变量的类型是否为字符串
  • is_object() - 查找变量是否为对象
  • is_array() - 查找变量是否为数组

添加注释

用户贡献注释 9 个注释

333
Malfist
16 年前
微优化不值得。

你必须执行一千万次才能注意到差异,仅仅多出两秒钟

$a===NULL; 耗时: 1.2424390316s
is_null($a); 耗时: 3.70693397522s

差值 = 2.46449494362
差值/10,000,000 = 0.000000246449494362

===NULL 和 is_null 之间的执行时间差异小于 250 纳秒。去优化一些重要的事情吧。
165
george at fauxpanels dot com
15 年前
看看 php 如何解析不同的值。$var 是变量。

$var = NULL "" 0 "0" 1

strlen($var) = 0 0 1 1 1
is_null($var) = TRUE FALSE FALSE FALSE FALSE
$var == "" = TRUE TRUE TRUE FALSE FALSE
!$var = TRUE TRUE TRUE TRUE FALSE
!is_null($var) = FALSE TRUE TRUE TRUE TRUE
$var != "" = FALSE FALSE FALSE TRUE TRUE
$var = FALSE FALSE FALSE FALSE TRUE

Peace!
88
contact dot 01834e2c at renegade334 dot me dot uk
9 年前
在 PHP 7 (phpng) 中,is_null 实际上比 === 稍微快一些,尽管两者之间的性能差异要小得多。

PHP 5.5.9
is_null - float(2.2381200790405)
=== - float(1.0024659633636)
=== 快约 100ns/次调用

PHP 7.0.0-dev (built: May 19 2015 10:16:06)
is_null - float(1.4121870994568)
=== - float(1.4577329158783)
is_null 快约 5ns/次调用
23
ahamilton9
2 年前
2022 年在 PHP 8.1 上进行的快速测试证实,仍然没有必要对 NULL 检查进行微优化

<?php

// 比较运算符
$before = microtime(true);
$var = null;
for (
$i=0 ; $i<1000000000 ; $i++) {
if(
$var === null) {}
}
$after = microtime(true);
echo
' ===: ' . ($after - $before) . " seconds\n";

// 函数
$before = microtime(true);
$var = null;
for (
$i=0 ; $i<1000000000 ; $i++) {
if(
is_null($var)) {}
}
$after = microtime(true);
echo
'is_null: ' . ($after - $before) . " seconds\n";

// ===: 4.1487579345703 seconds
// is_null: 4.1316878795624 seconds
16
ai dot unstmann at combase dot de
16 年前
我发现 is_null($var) 返回的结果与 isset($var) 完全相反,只是如果 $var 尚未设置,is_null($var) 会抛出通知。

以下代码将证明这一点

<?php

$quirks
= array(null, true, false, 0, 1, '', "\0", "unset");

foreach(
$quirks as $var) {
if (
$var === "unset") unset($var);

echo
is_null($var) ? 1 : 0;
echo isset(
$var) ? 1 : 0;
echo
"\n";
}

?>

这将输出类似于以下内容

10 // null
01 // true
01 // false
01 // 0
01 // 1
01 // ''
01 // "\0"
Notice: Undefined variable: var in /srv/www/htdocs/sandbox/null/nulltest.php on line 8
10 // (unset)

对于主要的奇怪类型/值,is_null($var) 显然总是返回 isset($var) 的相反结果,并且通知清楚地指出了 is_null() 语句有问题的行。你可能想仔细检查这些函数的返回值,但由于两者都被指定为返回布尔类型,所以应该没有疑问。

再仔细看看 PHP 规范,就会发现 is_null() 检查一个值是否为 null。因此,你可以向其传递任何值,例如函数的结果。
另一方面,isset() 应该检查一个变量的存在性,这使其成为一个语言构造,而不是一个函数。它唯一的目的是进行这种检查。传递其他任何内容都会导致错误。

了解这一点,我们可以得出以下不太可能得出的结论

作为语言结构,`isset()` 比 `is_null()` 更快、更可靠且更强大,应该优先使用 `isset()`,除非您直接传递函数的结果,而这本身就被认为是不好的编程实践。
-11
normadize (a) gmail (d) com
12 年前
实际上,在高负载服务器场景下,使用 `=== NULL` 而不是 `is_null()` 会很有用,因为在这种场景下,每秒有数百或数千个请求。在整个 PHP 执行链中,对大量“简单”操作节省微秒通常会导致能够以相同的速度提供更多页面,或者降低 CPU 使用率。人们通常会编写非常糟糕且缓慢的代码。
-13
strrev xc.noxeh@ellij
16 年前
`$var===NULL` 比 `is_null($var)` 快得多(结果相同)。

我进行了一些基准测试,迭代次数为 1000 万次。

`$a=null;`
`isset($a);` 用时:1.71841216087 秒
`$a==NULL;` 用时:1.27205181122 秒
$a===NULL; 耗时: 1.2424390316s
is_null($a); 耗时: 3.70693397522s
`$a=5;`
`isset($a);` 用时:1.15165400505 秒
`$a==NULL;` 用时:1.41901302338 秒
`$a===NULL;` 用时:1.21655392647 秒
`is_null($a);` 用时:3.78501200676 秒
`error_reporting(E_ALL&~E_NOTICE);`
`unset($a);`
`isset($a);` 用时:1.51441502571 秒
`$a==NULL;` 用时:16.5414860249 秒
`$a===NULL;` 用时:16.1273870468 秒
`is_null($a);` 用时:23.1918480396 秒

请注意,`isset` 仅包含在内是因为它在任何情况下都能提供良好的性能;然而,`isset` 并不相同,也不是相反的。
但您可能可以使用 `isset()` 来代替空值检查。

您不应该使用 `is_null`,除非您需要回调函数,或者为了与 `is_int`、`is_float` 等保持一致。
-6
etimjoshua4 at gmail dot com
3 年前
我发现,对于像 POST 这样的 HTTP 请求,`is_null` 并不是检查是否为空的最可靠选择。

尝试使用

`if(trim($var) == ""){`
// 执行某些操作
}

}

代替。
-42
我认为请求会对输入进行某些操作,使其肯定不为 NULL。
20 年前

关于在 MySQL 查询中避免 NULL,为什么不在 WHERE 子句中使用 IS NULL 和 IS NOT NULL。
`SELECT *`
`FROM someDatabase`

`WHERE someAttribute IS NOT NULL`

干杯,
To Top