php的缺陷与陷阱,PHP容易被忽略而出错陷阱 数字与字符串比较

本文探讨了PHP中数字与包含非数字字符的字符串比较时可能出现的非预期结果。当数字与不可转化为数字的字符串进行比较时,字符串会转换为0导致比较返回true。示例代码展示了当两个数字型字符串在数值上相等时,比较也会返回true,这可能会误导开发者。为避免这种情况,推荐使用全等比较符===来确保类型和值都相同。了解这些比较规则有助于写出更健壮的PHP代码。
摘要由CSDN通过智能技术生成

0 与任意非数字(或者说,不可转化为数字的字符)前导的字符串比较(操作符为==), 均返回 true.

原因是, 数字与字符串比较时, 先尝试将字符串转换为数字, 再比较, 一个不能转换为数字的字符串, 转换结果为0, 故, 与0比较总返回 true.

更加详细的比较规则, 多种类型的比较规则, 在 PHP手册/语言参考/运算符/比较运算符 可以找到.

在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的

如下示例:(注意$a和$b两个变量的最后一位不相等)

//示例1

$a = '511203199106034578';

$b = '511203199106034579';

if ($a==$b) {

echo 'equal';

} else {

echo 'notEqual';

}

?>

运行上面的程序却发现结果为equal(非我们认为的结果)

我们把$a与$b分别加一个字母a进去

//示例2

$a = 'a511203199106034578';

$b = 'a511203199106034579';

if ($a==$b) {

echo 'equal';

} else {

echo 'notEqual';

}

?>

这次输出的是notEqual(正确的结果)

示例1为equal是因为PHP把两个数字型字符串转换成数字型,而这两个数字刚好相等如下示例

$a = 511203199106034578;

$b = 511203199106034579;

echo $a; // 输出 5.1120319910603E+17 即511203199106030000

echo $b; // 输出 5.1120319910603E+17 即511203199106030000

?>

所以我们在示例1中得到的结果是equal

避免出现这种非预期结果的情况是使用类型比较符===如下示例(如果 $a 等于 $b,并且它们的类型也相同)

//示例4

$a = '511203199106034578';

$b = '511203199106034579';

if ($a===$b) {

echo 'equal';

} else {

echo 'notEqual';

}

?>

这样我们就可以得到预期中的notEqual了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值