类型转换为布尔值

2022-08-30 10:50:02

有人可以解释一下为什么会这样吗:

var_dump((bool) 1==2);

返回

bool(true)

var_dump(1==2);

返回

bool(false)

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


答案 1

实际上,这并不像看起来那么奇怪。(bool) 具有比 == 更高的优先级,因此:

var_dump((bool) 1==2);

等效于此:

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

或者这个:

var_dump(true == 2);

由于类型杂耍,本质上也被强制转换为(因为这是一个“松散的比较”),所以它相当于这个:2bool

var_dump(true == true);

或者这个:

var_dump(true);

答案 2

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

((bool) 1)==2

这相当于

true == 2

通过转换和比较来评估,最终产生.2truetrue

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

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

查看实际效果


推荐