没有万能函数,isset()判断变量是否已声明且不为null,empty()则额外将”、0、’0’、false、[]等视为“空”;安全判断需组合使用,如isset($var) && $var !== ”或php 7.4+的??运算符。
PHP 空值判断该用 isset() 还是 empty()?
直接说结论:没有万能函数,isset() 和 empty() 检查的不是同一类“空”,混用会出 bug。比如 empty('0') 返回 true,但 isset('0') 是 true;isset(null) 是 false,而 empty(null) 是 true —— 表面结果一致,底层逻辑完全不同。
关键区别在于:
-
isset()只判断变量是否已声明且不为null(注意:不关心值是否“语义为空”) -
empty()先做isset(),再额外把''、0、0.0、'0'、false、[]都算作“空”
怎么安全地兼容 null / '' / 0 / 未定义?
多数业务场景真正要问的是:“这个值有没有被赋一个有意义的、可使用的值?”——这得靠组合判断,不能只靠一个函数。
推荐写法(按优先级排序):