类型转换为布尔值

时间:2011-12-05 02:39:51

标签: php casting boolean

有人能解释一下为什么会这样:

var_dump((bool) 1==2);

返回

bool(true)

但是

var_dump(1==2);

返回

bool(false)

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

5 个答案:

答案 0 :(得分:85)

它实际上并没有那么奇怪。 (bool) has higher precedence than ==,所以这个:

var_dump((bool) 1==2);

相当于:

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

或者这个:

var_dump(true == 2);

由于type juggling2也基本上被转换为bool(因为这是一个“宽松的比较”),所以它等同于:

var_dump(true == true);

或者这个:

var_dump(true);

答案 1 :(得分:19)

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

((bool) 1)==2

相当于

true == 2

通过将2转换为true并进行比较来评估,最终生成true

要查看预期结果,您需要添加parens以使订单明确:

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

<强> See it in action

答案 2 :(得分:7)

我用这种方式:

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

答案 3 :(得分:2)

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

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

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

$boolvar = boolval ('true');

字面上有一个三元运算符,但我不能推荐它

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

答案 4 :(得分:0)

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

首先,它将执行

(bool)1

和(bool)1将返回true。

现在,因为(bool)1在第二步是真的,你的陈述就像是

true ==2

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

true == true

这显然会回归真实。 我今年在帖子PHP Type casting中也解释过同样的事情。