条件判断逻辑异常排查:$type为register时进入非预期分支
问题出在逻辑运算符的误用!
你这里的核心错误是把逻辑与(&&)和逻辑或(||)搞反了,咱们一步步拆解看:
当$type = "register"时,你的原条件:
(isset($type)) && (($type != "register") || ($type != "document_approved") || ($type != "document_rejection"))
- 首先
isset($type)是真; - 然后看后面的三个条件:
$type != "register"是假,但$type != "document_approved"是真,$type != "document_rejection"也是真; - 因为用的是
||(逻辑或),只要其中一个条件为真,整个括号里的表达式就为真; - 所以整个if条件就变成了
真 && 真,自然会进入分支输出1。
你真正想要的逻辑应该是:当$type不是这三个值中的任何一个时,才进入if分支,这时候需要用&&(逻辑与)来连接三个不等于的条件——只有当三个条件都满足(也就是$type既不是register,也不是document_approved,还不是document_rejection),整个表达式才为真。
修正后的代码应该是这样:
if((isset($type)) && (($type != "register") && ($type != "document_approved") && ($type != "document_rejection"))) { echo 1; } else { echo 2; }
另外,为了让代码更简洁易读,也可以用in_array()来优化:
if(isset($type) && !in_array($type, ["register", "document_approved", "document_rejection"])) { echo 1; } else { echo 2; }
至于你简化后的代码能正常工作,是因为只有一个$type != "register"的条件,当$type是register时这个条件为假,整个if不成立,所以输出2,刚好符合你的预期,但多条件场景下逻辑运算符的选择就不能随便了~
内容的提问来源于stack exchange,提问作者Virb
相关产品推荐
相关产品推荐

