为什么将布尔型转换为布尔型总是返回false

时间:2018-08-20 11:48:57

标签: php casting

我只想知道为什么我打字-使用(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)

2 个答案:

答案 0 :(得分:4)

问题

强制类型转换比比较运算符具有更高的优先级。因此,在此表达式中:

$value = (bool) 2 > 1;

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

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

等同于:

$value = true > 1;

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

$value = 1 > 1;

哪个返回false


解决方案

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

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

即使在没有必要的情况下,括号也可能会有所帮助,因为它们可以使您的意图向更休闲的读者明确,甚至可能不会记住操作员优先级表。

答案 1 :(得分:1)

您正在将2强制转换为布尔值,因为强制转换的优先级高于比较,比较优先级高出返回true。您的表情是:

true > 1

哪个是false
将表达式放在括号之间或强制转换表达式的结果:

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

// Or
$value = 2 > 1;
var_dump((bool)$value); // true