有人可以解释我为什么这样的:类型转换为布尔
var_dump((bool) 1==2);
回报
bool(true)
但
var_dump(1==2);
回报
bool(false)
当然,第二次返回是正确的,但为什么在第一次php返回一个意外的值?
有人可以解释我为什么这样的:类型转换为布尔
var_dump((bool) 1==2);
回报
bool(true)
但
var_dump(1==2);
回报
bool(false)
当然,第二次返回是正确的,但为什么在第一次php返回一个意外的值?
它实际上并不像看起来那么奇怪。 (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);
因为在第一个例子中,演员发生在比较之前。所以,就好像你写
((bool) 1)==2
这相当于
true == 2
这是通过转换2
到true
和比较,最终产生true
评估。
要见你需要添加括号预期的结果,使顺序明确:
var_dump((bool)(1==2));
+1感谢您的快速响应 –
我用这样的方式:
!!0 (false)
!!1 (true)
正如标题要求输入的那样,这个答案是正确的,几乎可以用于任何语言。这种结构对于像JavaScript这样的语言来说是非常好的,你需要真正的“真”或“假”,但不能保持原始值。顺便说一句,用(bool)进行类型转换要快一点。 –
你写的声明((布尔)1 == 2)的方式将永远,因为它会返回true总是执行下面的流程代码:
首先,它会执行
(bool)1
和(bool)1将返回true。
现在,因为(布尔)1是在第二个步骤真正的语句会像
true ==2
因为如果我们将强制转换2到布尔它将返回true,在最后的状态你的发言就会像
true == true
这显然会返回true。 同样的事情,我已经在我的帖子PHP Type casting中解释过。
操作顺序让你在这里... – Brad