PHP中为何0与任意字符串用==比较会返回true?
为什么PHP中int(0)和任意字符串用==比较结果都是true?
这其实是PHP**松散比较(==)**的类型转换规则导致的,咱们一步步拆解来看:
松散比较的类型转换逻辑:当你使用
==比较不同类型的值时,PHP会自动触发类型转换,把两边的值转换成相同类型后再进行比较。当比较的一边是整数、另一边是字符串时,PHP会优先把字符串转换为整数来执行比较操作。字符串转整数的规则:PHP将字符串转为整数时,会从字符串的起始位置开始解析数字字符:
- 如果字符串以有效数字开头,就截取开头的数字部分转为整数(比如
'123abc'会转为123); - 如果字符串开头没有任何有效数字(就像你的
'storecredit'),或者是空字符串,转换后的结果就是int(0)。
- 如果字符串以有效数字开头,就截取开头的数字部分转为整数(比如
回到你的代码场景:你的
$arr['process_refunds']是int(0),和字符串'storecredit'用==比较时,PHP先把'storecredit'转换为int(0),然后比较0 == 0,结果自然是true。
你可以在php -a里测试这些例子验证规则:
echo 0 == 'abc'; // 输出 true echo 0 == '0xyz'; // 输出 true echo 123 == '123test'; // 输出 true echo 0 == ''; // 输出 true
- 解决办法:如果你需要同时比较值和类型,避免自动类型转换带来的意外,应该使用严格比较运算符
===:
echo ( $arr['process_refunds'] === 'storecredit' ) ? 'true' : 'false'; // 输出 false
内容的提问来源于stack exchange,提问作者Mubashar Abbas
相关产品推荐
相关产品推荐

