PHP 中 OR 运算符逻辑误用的典型陷阱与正确写法

本文详解 php 中 ||(or)运算符在权限校验等场景中因逻辑表达式设计不当导致条件始终成立或失效的问题,重点剖析德·摩根定律的应用与布尔逻辑重构方法。 本文详解 php 中 ||(or)运算符在权限校验等场景中因逻辑表达式设计不当导致条件始终成立或失效的问题,重点剖析德·摩根定律的应用与布尔逻辑重构方法。在 PHP 开发中,使用逻辑运算符进行访问控制(如管理员权限校验)是常见需求,但一个看似简单的 ||(OR)误用,往往引发严重的逻辑漏洞。例如以下代码:if (_SESSION\['user_id'\] != 4 \|\| _SESSION'rol' != 1) { exit('Access denied');} else { // 允许执行敏感操作}这段代码本意是:仅当用户 ID 为 4 且角色为 1 时才放行,但实际效果却完全相反------它几乎总为 true,导致绝大多数请求被错误拦截。? 问题根源:布尔逻辑理解偏差|| 是"或"运算符,只要任一操作数为 true,整个表达式即为 true。我们来逐情况分析原条件 _SESSION\['user_id'\] != 4 \|\| _SESSION'rol' != 1:user_idroluser_id ≠ 4rol ≠ 1整体结果(OR)实际含义41falsefalsefalse? 放行(符合预期)42falsetruetrue? 拒绝(但用户 ID 正确,仅角色不符)51truefalsetrue? 拒绝(但角色正确,仅 ID 不符)52truetruetrue? 拒绝可见:只有当两个条件同时不满足(即 user_id == 4 AND rol == 1)时,原表达式才为 false;其余所有组合均触发 exit。这违背了"ID 为 4 或角色为 1 即可通行"的业务意图(或更常见的是"必须同时满足"),属于典型的逻辑否定范围过宽。立即学习"PHP免费学习笔记(深入)"; 文心快码 文心快码(Comate)是百度推出的一款AI辅助编程工具

相关推荐
这个DBA有点耶2 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
用户8356290780512 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户8356290780512 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
这个DBA有点耶4 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技4 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend5 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence8 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
你好潘先生10 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师10 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码10 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python