PHP中类型转换与相等运算符优先级:为何两语句输出不同?
问题解析:两段PHP代码输出不同的原因
先拆解两行代码的执行逻辑:
对于
$a = (bool) 4 == 4;- 强制类型转换
(bool)的优先级高于比较运算符,所以先执行(bool)4,得到布尔值true。 - 接着执行松散比较
true == 4:PHP在松散比较时,会将非布尔类型的操作数转为布尔值,4转为布尔值是true,所以true == true结果为true,最终$a的值是true。
- 强制类型转换
对于
$b = (bool) 4 === 4;- 同样先执行
(bool)4得到true。 - 然后执行严格比较
true === 4:严格比较要求值和类型都完全一致,true是布尔类型,4是整数类型,类型不匹配,所以结果为false,最终$b的值是false。
- 同样先执行
你之前误以为是优先级问题,但实际上==和===的优先级确实相同,差异来自两者的比较规则:==是松散比较会自动做类型转换,===是严格比较不做类型转换,且要求类型完全匹配。
内容的提问来源于stack exchange,提问作者8ctopus
相关产品推荐
相关产品推荐

