isset检查变量是否已定义且不为null;empty判断值是否等价于false(含"0"等);is_null严格检测是否为null常量,未定义变量会触发Notice。

判断变量是否为空、是否存在、是否为 null,不能靠感觉——empty、isset、is_null 表面相似,实际逻辑完全不同。用错一个,可能让 0 被当成空、"" 被当成未定义、甚至 null 和 false 混为一谈。
isset:只关心“有没有被设置且不为 null”
它不是在问“值是不是空”,而是在问“这个变量有没有被声明,并且没被设成 null”。只要变量存在、有值(哪怕是 0、false、""),就返回 true。
-
$a = 0;→isset($a)是true -
$b = null;→isset($b)是false -
unset($c);或$c根本没定义 →isset($c)是false - 常用于检测
$_GET['id']、$_POST['name']是否传了参数(哪怕值是0或空字符串)
empty:关注“值是否等价于 false”
它把语义拉到了“业务层面的空”:比如表单提交了 "0",你可能希望它被当作有效输入;但若用户啥都没填,或填了 0、false、[],你就想过滤掉——empty 就是干这个的。
- 以下全部返回
true:null、false、0、0.0、"0"、""、[]、未定义变量 -
$x = "0"; empty($x)→true(注意:字符串"0"被特殊对待) -
$y = "false"; empty($y)→false(字符串内容不影响,只看转换布尔值结果) - 安全:对未定义变量调用不会报 Notice
is_null:严格只认“就是 NULL”
它最“较真”,只回答一个问题:这个变量的值是不是 PHP 的 null 常量?类型和值都必须匹配,其他一律 false。
立即学习“PHP免费学习笔记(深入)”;
-
$a = null;→is_null($a)是true -
$b = 0;、$c = "";、$d = false;→ 全部是false - 未定义变量(如
$e)调用is_null($e)会返回true,但会触发Notice: Undefined variable(这点和isset/empty不同) - 要精准区分
null和其他“假值”,必须用它,比如 API 返回字段明确约定null表示“无数据”,而0表示“数量为零”
怎么选?看你要解决什么问题
别记规则,记场景:
- 检查表单字段是否传了(哪怕值是
0或空串)→ 用isset - 检查用户输入是否“可视为未填写”(过滤掉
0、false、空数组等)→ 用empty - 确认某个接口返回值是否真的是
null(排除0、false干扰)→ 用is_null或更推荐=== null - 想同时确保变量已定义 + 不为空 → 组合用:
isset($var) && !empty($var)



















