为什么=!在php中似乎是一个合法的条件?

bom*_*mba 3 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);
}
Run Code Online (Sandbox Code Playgroud)

我注意到,而不是写作!=我应该,我写错了=!没有任何错误.

这可能是什么原因?

axi*_*iac 5

您没有在PHP中发现任何错误.您在程序中发现了一个错误以及您对PHP的了解.

$x =! 0事实上,是$x = !0.

!逻辑NOT运算符.
0评价为FALSE在布尔上下文,因此!0TRUE.

$x = ...是一项常规任务.作为任何作业,它做两件事:

  • 将右侧表达式的值存储到左侧变量中; 这里的表达是!0,如上所述,评估为TRUE;
  • 整个表达式($x = !0)的值是$x赋值后的值(TRUE如上所述).

当赋值用作语句时,其值将被丢弃.当它用来作为条件(在一个for,while,if,switch语句),其值用于控制该代码的执行.

这里,if($showPrice =! 0)总是采用if分支(而不是else分支),因为$showPrice = !0表达式的值总是TRUE如上所述.
此外,在评估此语句之后,值$showPrice也会变为TRUE.

单行代码中的两个错误.

从PHP的角度来看,代码是完全有效的,即使它很不寻常,也许它代表了程序员的意图.口译员没有任何理由抱怨它.但是,它可以被静态代码分析工具和一些PHP IDE检测并标记为可能的错误.