php - 为什么在布尔类型上转换 bool 总是返回 false
问题描述
我只想知道为什么如果我进行类型转换——使用 (bool)——表达式的布尔值——例如——即使表达式2 < 1
返回也总是返回?false
true
一个例子会说得更清楚
<?php
$value = (bool) 2 > 1;
var_dump($value); // bool(false)
$value = (bool) 2 < 1;
var_dump($value); // bool(false)
var_dump((bool)true) // bool(true)
var_dump((bool)false) // bool(false)
解决方案
问题
强制转换的优先级高于比较运算符。所以在这个表达式中:
$value = (bool) 2 > 1;
在应用运算符之前,(bool)
强制转换与文字相关联。因此,该表达式等价于:2
>
$value = ((bool) 2) > 1;
这相当于:
$value = true > 1;
这在语义上没有意义,但 PHP 允许并转换为整数,以便应用>
运算符,有效地给出:
$value = 1 > 1;
哪个返回false
。
解决方案
解决方案是添加括号并转换整个表达式:
$value = (bool)(2 > 1);
即使在不必要的时候,括号也会很有帮助,因为它们可以让更随意的读者清楚地了解你的意图,即使是那些可能没有记住运算符优先级表的读者。
推荐阅读
- reporting-services - 是否尝试设置此数据集中未定义的数据集参数“@BrandName”?
- javascript - 在一页中添加和编辑表单
- liquibase - 重复的列名,在注释变更集并取消注释后在 liquibase
- java - 是否可以使用 rgb 或十六进制颜色在终端中为 java 输出着色?
- google-cloud-platform - 如何使用 sinon 、 mocha chai 模拟以下代码的响应
- caching - 清除商店用品 5.6.2 中的商店缓存问题
- python - Plotly:如何创建包含下拉菜单的多面条形图?
- gatling - 我怎样才能使 check()....findAll.Save 在 Gatling 中不是强制性的?
- javascript - 无法使用 Multer 上传多个文件
- r - 使用 dplyr 对 naniar 的输出进行分组,嵌套/取消嵌套,与新版本的 R 兼容