类型转换为布尔值
有人可以解释一下为什么会这样吗:
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)
具有比 ==
更高的优先级,因此:
var_dump((bool) 1==2);
等效于此:
var_dump( ((bool) 1) == 2);
或者这个:
var_dump(true == 2);
由于类型杂耍,本质上也被强制转换为(因为这是一个“松散的比较”),所以它相当于这个:2
bool
var_dump(true == true);
或者这个:
var_dump(true);
因为在第一个示例中,强制转换发生在比较之前。所以这就像你写的
((bool) 1)==2
这相当于
true == 2
通过转换和比较来评估,最终产生.2
true
true
要查看预期结果,您需要添加 parens 以使顺序明确:
var_dump((bool)(1==2));