最准、最常用的方式是$var === null,因它不转换类型,能清晰区分null、false、0、空字符串;而== null和!$var会因隐式转换导致误判,is_null()对未定义变量更安全。

直接用 $var === null 是最准、最常用的方式。它不转换类型,能清晰区分 null、false、0、空字符串这些值。
为什么不能用 == null 或 !$var
因为 PHP 的松散比较会触发隐式转换:0 == null 为 true,'' == null 也是 true,但它们显然不是 null。同理,!$var 会把 0、false、'' 全部当成“假”,完全失去对 null 的专一判断能力。
-
0 == null→true(错误匹配) -
false == null→true(错误匹配) -
!$var在$var = 0时也进入分支(业务逻辑可能崩)
is_null() 和 === null 怎么选
is_null($var) 语义更明确,且对未定义变量(如 $undefined)不报错——它安静返回 false;而 $undefined === null 会抛出 Notice: Undefined variable。
- 处理动态键(如
$_GET['id']可能根本没传)→ 优先用is_null() - 变量已确定存在(比如函数返回值明确可能为
null)→=== null更快、更直白 - 性能差异极小(纳秒级),别为这个纠结;语义和安全性才是关键
数组键或对象属性里怎么安全判断 null
直接写 $arr['missing'] === null 或 $obj->prop === null 会报 Notice,因为键/属性不存在本身就会触发警告。
- 先用
isset($arr['key'])确认键存在,再用=== null判断值 → 两步操作 - 想一步到位又不报错?用
is_null($arr['key']),它对缺失键返回false,安全 - 注意:
isset($arr['key'])对null值返回false,但它无法区分“键不存在”和“键存在但值为null”
真正要判断的是“这个值是不是 PHP 的 null 类型”,而不是“它看起来像不像空”。别让 empty() 混进来——它连 0 和 '0' 都吃,跟 null 检测根本不是一回事。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











