null是PHP中表示“变量已存在但无值”的独立标量类型;is_null($var)比== null更可靠,因后者会类型转换导致误判,而前者仅当变量真实为null时返回true。

null 是 PHP 中一个独立的标量类型,它只有一个值:null(不区分大小写),表示“变量已存在但无值”——不是空字符串、不是 false、不是 0、也不是空数组,而是真正意义上的“未赋值”或“已被清空”。
为什么 is_null($var) 比 == null 更可靠
PHP 的松散比较(==)会触发类型转换,导致误判:
-
null == false→ true -
null == 0→ true -
null == ''→ true -
null == []→ true(PHP 7.2+)
而 is_null($var) 只在变量真实为 null 类型时返回 true,不进行任何隐式转换。等价但更严格的写法是 $var === null。
isset() 和 is_null() 是互逆关系,但行为不对称
isset($var) 返回 false 的情况恰好就是 is_null($var) 返回 true 的三种情形:
立即学习“PHP免费学习笔记(深入)”;
- 变量被显式赋值为
null($x = null;) - 变量从未赋值(
$y;,注意:仅在 declare(strict_types=0) 下有效) - 变量被
unset()过(unset($z);)
但要注意:isset() 对未定义变量不会报 Notice,而直接访问未定义变量(如 echo $undefined;)会触发警告;is_null() 对未定义变量也会触发 Notice,所以实际使用中常配合 isset() 或错误抑制符 @(不推荐)。
空数组 [] 和 null 完全不同,混用会出 Warning
空数组是合法的 array 类型,可直接调用 count()、array_keys() 等函数;null 是标量,对它调用这些函数会报 Warning: count(): Parameter must be an array or an object that implements Countable。
判断逻辑应明确区分:
- 检查是否为「空数组」:用
is_array($var) && count($var) === 0 - 检查是否为「null」:用
is_null($var)或$var === null - 避免用
empty($var)替代二者——它对0、"0"、false、null、""、[]全部返回 true,语义太宽泛
最易被忽略的一点:PHP 中「变量存在但值为 null」和「变量根本不存在」在运行时都表现为 is_null() 为 true,但前者能通过 isset() 区分(返回 false),后者在严格模式或某些扩展下可能引发更深层的初始化问题——尤其在对象属性、函数参数默认值、JSON 解码为 null 字段时,必须按语义选对检测方式。



















