is_null()仅适用于已定义变量,用于精确判断值是否为null;对未定义变量会触发Notice,不能替代isset()或empty(),且性能不如$x === null。

is_null() 只能用于已定义变量
is_null() 的核心限制是:它不接受未定义变量作为参数。传入未声明的变量(比如 $user_name 根本没出现过),PHP 会直接抛出 Notice: Undefined variable,然后函数根本不会执行。
所以它不是“安全兜底函数”,而是“精准排错工具”——只适合你**已经确定变量存在**,只想确认它是否被显式设为 null 的场景。
- ✅ 正确用法:
$data = null; if (is_null($data)) { ... } - ❌ 危险用法:
if (is_null($undefined_var)) { ... }→ 触发 Notice - ⚠️ 注意:
is_null(null)返回true;is_null('')、is_null(0)、is_null(false)全部返回false
和 === null 比,选哪个?
两者语义一致,都要求值和类型同时为 null。但 === null 更轻量、更常用,且写法更直白。
-
is_null($x)是函数调用,有开销,且多一层封装 -
$x === null是语言级比较,性能略优,也更符合现代 PHP 风格 - 二者对未定义变量行为相同:都会报
Undefined variable,所以都得先确保变量已存在
结论:除非你在写非常老的代码或团队强制规范,否则直接用 $x === null 更稳妥。
立即学习“PHP免费学习笔记(深入)”;
为什么不能代替 isset() 或 empty()?
is_null() 只回答一个问题:“这个变量是不是 null?” 它完全不管“空字符串”“0”“false”“空数组”这些在业务中常被当作“空”的值。
-
isset($x)判断的是“变量是否存在且不为null” —— 它对0、''、false都返回true -
empty($x)判断的是“这个值在布尔上下文中是否为false” —— 它对0、'0'、''、null、false、[]全部返回true -
is_null($x)对0、''、false、[]全部返回false,只认null
混用会出 bug:比如想过滤数据库里真正缺失的字段(NULL),却用了 empty(),结果把合法的 0(如年龄、状态码)也干掉了。
数组键值为 null 时,is_null() 有用吗?
有用,但前提是你已经确认键存在。比如:
<pre class="brush:php;toolbar:false;">$row = ['name' => 'Alice', 'phone' => null];
if (array_key_exists('phone', $row) && is_null($row['phone'])) {
// 这里能准确识别:phone 键存在,且值就是 null
}
注意别写成 is_null($row['phone']) 就完事——如果 <code>$row 里压根没有 'phone' 键,这行就会报 Notice: Undefined index。
真正容易被忽略的是:数组键存在性 ≠ 值存在性。isset($row['phone']) 在值为 null 时返回 false,这时候必须用 array_key_exists() 配合 is_null() 才能完整覆盖。



















