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
这是通过转换2
为true
和比较,最终产生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铸造年 。