types转换为布尔值

有人可以解释为什么这样:

var_dump((bool) 1==2); 

回报

 bool(true) 

 var_dump(1==2); 

回报

 bool(false) 

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

实际上并不奇怪。 (bool)具有比==更高的优先级 ,所以这个:

 var_dump((bool) 1==2); 

相当于这个:

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

或这个:

 var_dump(true == 2); 

由于types杂耍 , 2也基本上被投给bool (因为这是一个“宽松的比较”),所以它相当于这样的:

 var_dump(true == true); 

或这个:

 var_dump(true); 

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

 ((bool) 1)==2 

相当于

 true == 2 

这是通过转换2true和比较,最终产生true评估。

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

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

看到它的行动

我用这种方式:

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

你写的语句((bool)1 == 2)的方式总是返回true,因为它总是执行下面的代码:

首先,它会执行

 (bool)1 

和(bool)1将返回true。

现在(布尔)1在第二步是真的,你的声明就像

 true ==2 

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

 true == true 

这显然会回报真实的。 同样的事情,我已经解释了在我的发布PHPtypes铸造年 。