PHP 如何判断变量为空
在日常写代码时,我们经常要判断某个内容有没有用——比如用户填的表单、接口返回的数据,这些内容经常会有“空”的情况。要是判断错了,比如把“0”“false”这些正常内容当成空,就可能出现用户提交了数字却被系统当成没填的bug。
先搞懂“空”在PHP里的几种情况
PHP里的“空”不是只有“啥都没有”这一种,很多你以为有内容的情况,其实会被PHP判定为空。举几个生活化的例子:

比如你去便利店买水,掏口袋掏出来的情况可能有:
啥都没掏出来(对应空字符串`""`、`null`);
- 掏出来的是没拆封的空红包(对应布尔值
false、空数组[]); - 掏出来的是面值0元的代金券(对应数字
0、字符串"0")。
这些在PHP里全都会被当成“空”,如果用错判断方法,就会闹笑话。
最常用的判断:empty() 函数
这是新手最常用的判断方式,它会把刚才说的所有“空情况”都认成空,非常适合做“用户有没有填内容”这种场景。
比如做个用户注册的表单,要判断用户有没有填昵称:
`php
// 假设用户提交的昵称是空字符串
$nickname = "";
if (empty($nickname)) {
echo "请填写昵称!";
}
`
这个代码会正确弹出提示。但如果用户填的昵称是"0",它也会被当成空——如果你的昵称允许填0,就不能用empty(),不然会把“0”当成没填。
严格判断存在:isset() 函数
这个函数只判断“变量有没有被定义,而且不是null”,适合判断“某个参数有没有传过来”的场景,不会把数字0当成空。
比如你做一个商品详情页,URL里带的商品ID:https://你的网站.com/goods.php?id=123,要判断ID有没有传过来:
`php
if (isset($_GET["id"])) {
echo "商品ID是:" . $_GET["id"];
} else {
echo "请选择要查看的商品!";
}
`
要是用户没传ID,或者传了id=null,它才会提示没选;如果传了id=0,也会正确返回商品ID,不会误判。
最严谨的判断:=== 绝对等于
要是你需要100%精准判断某个值就是空字符串,就用“绝对等于”运算符,它会同时判断值和类型,不会混淆0和空。
比如你做一个问卷收集,允许用户填“0”分的评分,要排除空值和null:
`php
$score = $_POST["score"];
if ($score === "" || $score === null) {
echo "请填写评分!";
} else {
echo "您的评分是:" . $score;
}
`
这里===会严格检查,只有真的是空字符串或null才会提示,用户填的0分也会被正确识别。
避坑小提醒
很多新手会踩两个坑:一是混用empty()和isset(),比如判断ID时用empty($_GET["id"]),会把id=0当成空;二是用==代替===,导致类型判断错误。
简单总结:如果只是要判断“用户有没有填内容”,用empty();判断“参数有没有传”,用isset();需要精准区分值的类型,就用===。