类型转换为布尔值

问题描述 投票:0回答:6

有人可以解释一下为什么吗:

var_dump((bool) 1==2);

退货

bool(true)

但是

var_dump(1==2);

退货

bool(false)

当然第二次返回是正确的,但是为什么第一次php返回一个意外的值?

php casting boolean
6个回答
98
投票

其实并没有看起来那么奇怪。

(bool)
的优先级高于
==
,所以:

var_dump((bool) 1==2);

等价于:

var_dump(  ((bool) 1)   == 2);

或者这个:

var_dump(true == 2);

由于类型杂耍

2
本质上也被转换为
bool
(因为这是一个“松散比较”),所以它相当于:

var_dump(true == true);

或者这个:

var_dump(true);

21
投票

因为在第一个示例中,转换发生在比较之前。所以就好像你写的一样

((bool) 1)==2

相当于

true == 2

通过将

2
转换为
true
并进行比较来评估,最终产生
true

要查看预期结果,您需要添加括号以使顺序明确:

var_dump((bool)(1==2));

查看实际效果


7
投票

我用的是这个方法:

!!0 (false)
!!1 (true)

2
投票

filter_var - 使用特定过滤器过滤变量

$boolvar = filter_var('true', FILTER_VALIDATE_BOOLEAN);

boolval - 获取变量的布尔值 PHP 5 >=

$boolvar = boolval ('true');

实际上是用三元运算符,但我不能推荐它

$boolvar = ($string === 'true')  ? true: false; 

0
投票

您编写语句 ((bool) 1==2) 的方式将始终返回 true,因为它将始终执行如下流程的代码:

首先,它会执行

(bool)1

并且 (bool) 1 将返回 true。

现在,由于 (bool)1 在第二步为 true,你的语句将如下

true ==2

因为如果我们将 2 类型转换为布尔值,它将返回 true,在最终状态下,你的语句将如下

true == true

这显然会返回 true。


0
投票

您错过了括号,您必须按以下方式执行此操作。

var_dump((bool) (1==2));
© www.soinside.com 2019 - 2024. All rights reserved.