首页 > 解决方案 > 为什么=!似乎是 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);
}

我注意到我没有写!=我应该写,而是写错了=! 没有得到任何错误。

这可能是什么原因?

标签: php

解决方案


您没有在 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 可以检测到它并将其标记为可能的错误。


推荐阅读