PHP中为何=!表达式未触发报错?探究其合法原因
为什么PHP中把
!=写成=!不会触发报错? 这个问题挺有意思的,我来给你拆解一下背后的原因:
首先要明确:=!在PHP里不是一个非法运算符,它会被解析器拆分成两个合法的运算符——赋值运算符=和逻辑非运算符!,所以PHP的语法检查不会报错,因为这完全符合语法规则。
咱们结合你的代码片段具体分析:
if($showPrice =! 0){ $worksheet->mergeCells('A'.$rowCount.':F'.$rowCount); $worksheet->SetCellValue('A'.$rowCount, 'Total Weight'); $worksheet->SetCellValue('G'.$rowCount, $totalWeight); }else{ $worksheet->mergeCells('A'.$rowCount.':D'.$rowCount); $worksheet->SetCellValue('A'.$rowCount, 'Total Weight'); $worksheet->SetCellValue('E'.$rowCount, $totalWeight); }
这段代码的执行逻辑是这样的:
- 先计算右侧的
!0:在PHP的布尔类型转换规则里,数字0会被视为布尔值false,对它取逻辑非后得到true。 - 然后把
true赋值给变量$showPrice,而PHP里的赋值表达式本身会返回被赋的值(也就是true)。 - 所以整个
if条件等价于if(true),永远会执行第一个分支的代码,完全不会进入else块。
简单来说,这是一个逻辑错误而非语法错误:PHP能正确理解你写的代码,但代码的逻辑和你原本想写的$showPrice != 0完全不一样——你原本是想做不等于判断,结果写成了“把!0的结果赋值给$showPrice,然后判断这个赋值结果”。
这种错误很容易因为拼写失误出现,而且因为语法合法,PHP不会给出任何提示,只能靠自己仔细检查代码逻辑来发现。
内容的提问来源于stack exchange,提问作者bomba
相关产品推荐
相关产品推荐

