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