PHP 如何判断变量为空

在日常写代码时,我们经常要判断某个内容有没有用——比如用户填的表单、接口返回的数据,这些内容经常会有“空”的情况。要是判断错了,比如把“0”“false”这些正常内容当成空,就可能出现用户提交了数字却被系统当成没填的bug。

先搞懂“空”在PHP里的几种情况

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();需要精准区分值的类型,就用===。

上一篇 JavaScript 日期怎么比较