2024年PHP日本大会

is_null

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

is_null查找变量是否为null

描述

is_null(混合 $value): 布尔值

查找给定变量是否为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)

参见

添加注释

用户贡献的注释 5 条注释

Malfist
16年前
微优化不值得。

你必须执行一千万次才能注意到差异,略多于2秒

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

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

===NULL 和 is_null 之间的执行时间差小于 250 纳秒。去优化一些重要的事情吧。
george at fauxpanels dot com
16年前
查看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

和平!
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
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) . " 秒\n";

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

// ===: 4.1487579345703 秒
// is_null: 4.1316878795624 秒
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()` 函数更快、更可靠且更强大,并且应该优先于 `is_null()` 函数使用,除非您直接传递函数的结果,而这本身就被认为是不好的编程实践。
To Top