有人可以解释一下为什么吗:
var_dump((bool) 1==2);
退货
bool(true)
但是
var_dump(1==2);
退货
bool(false)
当然第二次返回是正确的,但是为什么第一次php返回一个意外的值?
因为在第一个示例中,转换发生在比较之前。所以就好像你写的一样
((bool) 1)==2
相当于
true == 2
通过将
2
转换为true
并进行比较来评估,最终产生true
。
要查看预期结果,您需要添加括号以使顺序明确:
var_dump((bool)(1==2));
我用的是这个方法:
!!0 (false)
!!1 (true)
filter_var - 使用特定过滤器过滤变量
$boolvar = filter_var('true', FILTER_VALIDATE_BOOLEAN);
boolval - 获取变量的布尔值 PHP 5 >=
$boolvar = boolval ('true');
实际上是用三元运算符,但我不能推荐它
$boolvar = ($string === 'true') ? true: false;
您编写语句 ((bool) 1==2) 的方式将始终返回 true,因为它将始终执行如下流程的代码:
首先,它会执行
(bool)1
并且 (bool) 1 将返回 true。
现在,由于 (bool)1 在第二步为 true,你的语句将如下
true ==2
因为如果我们将 2 类型转换为布尔值,它将返回 true,在最终状态下,你的语句将如下
true == true
这显然会返回 true。
您错过了括号,您必须按以下方式执行此操作。
var_dump((bool) (1==2));