PHP if-else语句条件判断输出Correct的原因解析
PHP if判断输出Correct的逻辑解释
对应运行代码如下:
<?php $a = 200; $b = 300; if ($a > $b + $b != 3) print "Correct"; else print "Incorrect"; ?>
代码实际运行输出为 Correct,这个结果是PHP的运算符优先级、结合方向、松散比较规则共同作用的结果,运算步骤拆解:
- 第一步:优先计算高优先级的算术运算。PHP里
+这类算术运算符优先级远高于比较运算符,所以先算$b + $b,代入$b=300得到结果600,此时if括号内的表达式简化为200 > 600 != 3 - 第二步:按左结合规则计算同优先级比较。
>和!=属于同优先级比较运算符,PHP对这类同优先级运算符遵循从左到右的左结合规则,所以先算左侧的200 > 600,结果显然不成立,得到布尔值false,表达式进一步简化为false != 3 - 第三步:松散比较得到最终判断值。PHP默认使用松散比较,不同类型值比较时会自动做类型转换:布尔值
false和整数3比较时,false会被转为整数0,0和3不相等,因此false != 3的判断结果为布尔值true
最终if条件为真,自然执行if分支输出Correct。不少人会误判结果,基本都是错把运算顺序理解成先算后面的$b !=3,忽略了算术运算符的优先级更高、同优先级比较左结合的规则。
内容的提问来源于stack exchange,提问作者nica123
相关产品推荐
相关产品推荐

