首页 > 解决方案 > 为什么在布尔类型上转换 bool 总是返回 false

问题描述

我只想知道为什么如果我进行类型转换——使用 (bool)——表达式的布尔值——例如——即使表达式2 < 1返回也总是返回?falsetrue

一个例子会说得更清楚

<?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)

标签: phpcasting

解决方案


问题

强制转换的优先级高于比较运算符。所以在这个表达式中:

$value = (bool) 2 > 1;

在应用运算符之前(bool)强制转换与文字相关联。因此,该表达式等价于:2 >

$value = ((bool) 2) > 1;

这相当于:

$value = true > 1;

这在语义上没有意义,但 PHP 允许并转换为整数,以便应用>运算符,有效地给出:

$value = 1 > 1;

哪个返回false


解决方案

解决方案是添加括号并转换整个表达式:

$value = (bool)(2 > 1);

即使在不必要的时候,括号也会很有帮助,因为它们可以让更随意的读者清楚地了解你的意图,即使是那些可能没有记住运算符优先级表的读者。


推荐阅读