有人能解释一下为什么会这样:
var_dump((bool) 1==2);
返回
bool(true)
但是
var_dump(1==2);
返回
bool(false)
当然第二次返回是正确的,但为什么在第一次使用php会返回一个意外的值?
答案 0 :(得分:85)
它实际上并没有那么奇怪。 (bool)
has higher precedence than ==
,所以这个:
var_dump((bool) 1==2);
相当于:
var_dump( ((bool) 1) == 2);
或者这个:
var_dump(true == 2);
由于type juggling,2
也基本上被转换为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中也解释过同样的事情。