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);
}
我注意到我没有写!=我应该写,而是写错了=! 没有得到任何错误。
这可能是什么原因?
解决方案
您没有在 PHP 中发现任何错误。您在您的程序和您对 PHP 的了解中发现了一个错误。
$x =! 0
是,事实上,$x = !0
。
!
是逻辑NOT
运算符。
0
被评估为FALSE
在布尔上下文中,因此!0
是TRUE
.
$x = ...
是一个常规任务。与任何作业一样,它会做两件事:
- 将右侧表达式的值存储到左侧变量中;这里的表达式是
!0
,如上所述,被评估为TRUE
; - 整个表达式 (
$x = !0
) 的值是$x
赋值后的值 (TRUE
如上所述)。
当赋值它被用作语句时,它的值被丢弃。当它用作条件时(在for
, while
, if
,switch
语句中),它的值用于控制代码的执行。
在这里,if($showPrice =! 0)
总是采用if
分支(而不是else
分支),因为$showPrice = !0
表达式的值总是TRUE
如上所述。此外,在评估此语句后
, 的值$showPrice
也变为。TRUE
一行代码中的两个错误。
从 PHP 的角度来看,代码是完全有效的,即使它不寻常,也可能代表了程序员的意图。口译员没有任何理由抱怨它。但是,静态代码分析工具和一些 PHP IDE 可以检测到它并将其标记为可能的错误。
推荐阅读
- python - 如何使用另一个数据框中的值对数据框中的每个元素应用限制
- avro - Spring Cloud Stream + Avro
- postgresql - Docker Compose: run a command at build time but not at run time
- sql - 使用 Apache Spark SQL 连接到 Oracle 的 Databricks 秘密
- forms - Codeigniter 4 模块形成动作
- flutter - 既然标题已弃用,如何处理 BottomNavigationBarItem 上的文本溢出?
- excel - 运行日期选择器工具时多选并在 Excel 中使用 VBA 自动调整
- twitter-bootstrap - (width: w, height: h) 在 Bootstrap scss _sizing 文件中迭代了什么?
- javascript - 如何为 React-Table 实现全局过滤搜索?
- python - 试图弄清楚如何在 .txt 文件上使用 infile.readline()