PHPisset()和empty()区别详解
本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《PHP isset() 与 empty() 对比解析》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

理解 isset() 的核心行为
在 PHP 中,isset() 函数用于检测变量是否已设置(即存在)并且其值不为 NULL。它不关心变量的值是否为空字符串、零或空数组,只要变量被声明且不为 NULL,isset() 就会返回 true。
考虑以下前端 JavaScript 代码片段,它通过 GET 请求发送表单数据:
formQuote.addEventListener('submit', (event) => {
event.preventDefault();
// 当用户未输入时,fromDate 和 toDate 会是空字符串
fromDate = formQuote.elements["fromDate"].value;
toDate = formQuote.elements["toDate"].value;
// 如果 apptmnt 单选框未选中,apptmnt 可能是 undefined
apptmnt = $('input[name="apptmnt"]:checked').val();
console.log(fromDate); // 输出:""
console.log(toDate); // 输出:""
console.log(apptmnt); // 输出:undefined (如果未选中)
// 拼接 URL 参数:例如 ?fromDate=&toDate=&apptmnt=undefined
$('#priceDisplay').load('forms/quote.php?fromDate=' + fromDate + '&toDate=' + toDate + '&apptmnt=' + apptmnt);
});当 fromDate 和 toDate 为空字符串 ("") 时,它们作为 URL 参数发送到服务器,如 fromDate=&toDate=。在 PHP 中,$_GET['fromDate'] 和 $_GET['toDate'] 将被解析为空字符串 ''。
对于 apptmnt 变量,如果其值为 JavaScript 的 undefined,当它被拼接到 URL 中时,通常会转换为字符串 'undefined',例如 apptmnt=undefined。在 PHP 中,$_GET['apptmnt'] 将是字符串 'undefined'。
现在,我们来看后端 PHP 代码如何处理这些参数:
<?php
if (isset($_GET['fromDate'], $_GET['toDate'], $_GET['apptmnt'])) {
echo 'true';
} else {
echo 'false';
}
?>由于 $_GET['fromDate'] (空字符串 '')、$_GET['toDate'] (空字符串 '') 和 $_GET['apptmnt'] (字符串 'undefined' 或空字符串 '') 都已存在且不为 NULL,isset() 函数对它们都会返回 true。因此,即使这些变量在逻辑上是“空”的或“未定义的”,isset() 也会判断为 true,导致上述 PHP 代码输出 'true'。
isset() 与 empty() 的关键区别
为了更好地控制变量的“空”状态判断,PHP 提供了 empty() 函数。empty() 函数用于检查变量是否被认为是空的。当变量的值为以下情况之一时,empty() 会返回 true:
- "" (空字符串)
- 0 (整数零)
- 0.0 (浮点数零)
- "0" (字符串零)
- NULL
- FALSE
- array() (空数组)
- 未声明的变量 (同时会发出警告)
通过以下示例,我们可以清晰地看到 isset() 和 !empty() 在判断变量“空”状态时的不同行为:
<?php
$a = array('blank' => ''); // 数组键 'blank' 存在,值为一个空字符串
$b = null; // 变量 b 存在,值为 NULL
$c = 'hello'; // 变量 c 存在,值为非空字符串
$d = 0; // 变量 d 存在,值为整数零
$e = array(); // 变量 e 存在,值为空数组
echo "--- isset() Tests ---<br>";
var_dump(isset($a['blank'])); // bool(true) - 'blank' 键存在且不为 NULL
var_dump(isset($b)); // bool(false) - $b 存在但值为 NULL
var_dump(isset($c)); // bool(true)
var_dump(isset($d)); // bool(true)
var_dump(isset($e)); // bool(true)
var_dump(isset($f)); // bool(false) - $f 未声明
echo "<br>--- !empty() Tests ---<br>";
var_dump(!empty($a['blank'])); // bool(false) - $a['blank'] 是空字符串,所以 empty() 为 true
var_dump(!empty($b)); // bool(false) - $b 是 NULL,所以 empty() 为 true
var_dump(!empty($c)); // bool(true) - $c 是非空字符串,所以 empty() 为 false
var_dump(!empty($d)); // bool(false) - $d 是整数零,所以 empty() 为 true
var_dump(!empty($e)); // bool(false) - $e 是空数组,所以 empty() 为 true
var_dump(!empty($f)); // bool(false) - $f 未声明,所以 empty() 为 true (会发出通知)
?>从上述输出可以看出:
- isset($a['blank']) 返回 true,因为 $a['blank'] 确实存在且不为 NULL。
- !empty($a['blank']) 返回 false,因为 $a['blank'] 是一个空字符串,empty() 认为它是空的。
选择合适的校验方法
在实际开发中,根据您的需求选择 isset() 或 empty(),或者将它们结合使用:
仅检查变量是否存在且非 NULL:
- 使用 isset()。
- 适用于确保某个配置项、请求参数或数组键确实被定义,而不管其具体内容是否为空。
- 示例:if (isset($_POST['username'])) { ... }
检查变量是否包含“有意义”的数据(非空、非零、非假等):
- 使用 !empty()。
- 适用于验证用户输入、检查数据库查询结果是否为空、判断字符串或数组是否有实际内容。
- 示例:if (!empty($_POST['username'])) { ... }
同时检查变量是否存在且包含“有意义”的数据:
- 结合使用 isset() 和 !empty()。这是最严谨的校验方式,推荐用于处理用户输入或外部数据。
- if (isset($_GET['param']) && !empty($_GET['param'])) { ... }
- 这种方式首先确保 $_GET['param'] 存在且不为 NULL,然后才检查其是否为空。这避免了直接对可能不存在的变量使用 empty() 导致的通知(Notice)。
注意事项
- JavaScript undefined 与 PHP 字符串: 当 JavaScript 的 undefined 值被拼接到 URL 参数中时,它会变成 PHP 中的字符串 'undefined'。isset($_GET['param']) 对于 'undefined' 字符串会返回 true,而 empty($_GET['param']) 对于 'undefined' 字符串会返回 false (因为 'undefined' 是非空字符串)。如果您需要区分这种情况,可能需要额外判断 $_GET['param'] === 'undefined'。
- 用户输入验证: 永远不要直接信任用户输入。即使 isset() 或 !empty() 返回 true,也需要对输入数据进行进一步的过滤、消毒和验证,以防止 SQL 注入、XSS 攻击等安全问题。
- 多参数判断: isset() 可以接受多个参数,只有当所有参数都存在且不为 NULL 时才返回 true。而 empty() 只能接受一个参数。
总结
isset() 和 empty() 是 PHP 中用于变量状态检查的两个重要函数,它们各自有明确的用途和判断逻辑。isset() 关注变量的“存在性”和“非 NULL 性”,而 empty() 则关注变量的“内容是否为空”。理解它们之间的差异,并根据具体的业务需求选择或组合使用,是编写健壮、安全 PHP 代码的关键。对于来自前端的表单数据,尤其建议使用 if (isset($_GET['param']) && !empty($_GET['param'])) 这样的组合校验,以确保数据的有效性和可靠性。
本篇关于《PHPisset()和empty()区别详解》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!
新建PHP文件的几种实用方法
- 上一篇
- 新建PHP文件的几种实用方法
- 下一篇
- Python中id的作用与对象识别解析
-
- 文章 · php教程 | 6小时前 | 安全加固 漏洞检测 PHP安全扫描工具 RIPS PHPSecurityChecker
- PHP安全扫描工具使用与漏洞检测教程
- 171浏览 收藏
-
- 文章 · php教程 | 7小时前 |
- PHP获取域名的几种方法
- 124浏览 收藏
-
- 文章 · php教程 | 7小时前 |
- MeekroDB聚合查询优化技巧
- 334浏览 收藏
-
- 文章 · php教程 | 7小时前 |
- PHP隐藏空数据行技巧分享
- 182浏览 收藏
-
- 文章 · php教程 | 7小时前 | 日志分析 ELKStack PHP代码注入 eval()函数 Web服务器访问日志
- PHP代码注入日志检测技巧分享
- 133浏览 收藏
-
- 文章 · php教程 | 7小时前 | 路由 控制器 HTTP方法 PHPRESTfulAPI JSON响应
- PHP创建RESTfulAPI及路由方法
- 390浏览 收藏
-
- 文章 · php教程 | 7小时前 |
- array_map与array_walk性能差异解析
- 399浏览 收藏
-
- 文章 · php教程 | 8小时前 |
- PHP图片压缩失败?文件覆盖问题详解
- 190浏览 收藏
-
- 文章 · php教程 | 8小时前 |
- PHPmktime参数错误解决方法
- 230浏览 收藏
-
- 文章 · php教程 | 8小时前 |
- PHP会话管理与用户状态优化技巧
- 221浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3193次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3405次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3436次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4543次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3814次使用
-
- PHP技术的高薪回报与发展前景
- 2023-10-08 501浏览
-
- 基于 PHP 的商场优惠券系统开发中的常见问题解决方案
- 2023-10-05 501浏览
-
- 如何使用PHP开发简单的在线支付功能
- 2023-09-27 501浏览
-
- PHP消息队列开发指南:实现分布式缓存刷新器
- 2023-09-30 501浏览
-
- 如何在PHP微服务中实现分布式任务分配和调度
- 2023-10-04 501浏览

