最稳妥的 null 判断方式是 is_null(),它不转换类型、仅识别字面量 null,对未定义变量也安全;而 == null 易误判,=== null 会触发未定义变量警告。

用 is_null() 判断最稳妥
直接用 is_null() 是唯一能准确区分 null 和其他“空值”的方式。它不进行类型转换,只认字面量 null,不会把 0、''、false 误判为 null。
常见错误是用 == null 或 === null 混淆场景:
-
== null会把0、''、false全部当作true(松散比较) -
=== null虽然严格,但若变量未定义,会触发Notice: Undefined variable -
is_null($var)对未定义变量也安全——只要先确保变量存在,或配合isset()使用
示例:
var_dump(is_null($undefined)); // bool(false),不报错<br>var_dump($undefined === null); // Notice + NULL
检查前先确认变量是否已声明
PHP 中未声明的变量直接参与判断会报 Notice,尤其在严格模式或生产环境开启错误报告时很烦人。
立即学习“PHP免费学习笔记(深入)”;
推荐组合用法:
- 想确认“是
null”且变量可能未定义 →isset($var) === false || is_null($var) - 更简洁写法:
!isset($var) || is_null($var)(注意:两者都为true时才表示真null或未定义) - 如果只是防错,且业务上“未定义”和“
null”等价,直接用!isset($var)更轻量
empty() 和 is_null() 完全不是一回事
empty() 是“假值探测器”,不是 null 专用函数。它返回 true 的情况包括:null、''、0、'0'、false、[],甚至某些对象(PHP 8.0+)。
所以:
- 用
empty($var)判断null→ 错误,会漏掉你其实想保留的0或false - 用
is_null($var)判断是否为空字符串 → 错误,它对''返回false - 需要同时排除
null和空字符串?写成is_null($var) || $var === ''
在数组和对象属性中取值时特别容易踩坑
从 $_GET、$_POST 或对象属性读值时,常出现“看起来是 null,其实是字符串 'null' 或数字 0”。
实操建议:
- 从超全局数组取值,先用
filter_input()做类型过滤,比如filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT),避免手动判断 - 访问对象属性前加
property_exists()或用isset($obj->prop),再用is_null($obj->prop) - 数组键存在但值为
null时,array_key_exists('key', $arr)返回true,而isset($arr['key'])返回false—— 这个差异必须记牢
真正难的不是写对一行判断,而是每次取值前,你得清楚这个变量的来源、可能的类型、以及业务上“空”到底指什么。漏掉这一层,is_null() 写得再准也没用。











