You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:16:33