PHP   发布时间:2019-11-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP容易被忽略而出错陷阱 数字与字符串比较大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

更加详细的比较规则,多种类型的比较规则,在

php手册/语言参/运算符/比较运算符

可以找到.在php里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的
如下示例:(注意$a和$b两个变量的最后一位不相等)
title"> 代码如下:
//示例1
php
$a = '511203199106034578';
$b = '511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>

运行上面的程序却发现结果为equal(非我们认为的结果) 我们把$a与$b分别加一个字母a进去
title"> 代码如下:
//示例2
php
$a = 'a511203199106034578';
$b = 'a511203199106034579';
if ($a==$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>

这次输出的是notEqual(正确的结果) 示例1为equal是因php把两个数字型字符串转换成数字型,而这两个数字刚好相等如下示例
title"> 代码如下:
php
$a = 511203199106034578;
$b = 511203199106034579;
echo $a; // 输出 5.1120319910603E+17 即511203199106030000
echo $b; // 输出 5.1120319910603E+17 即511203199106030000
?>

所以我们在示例1中得到的结果是equal 避免出现这种非预期结果的情况是使用类型比较符===如下示例(如果 $a 等于 $b,并且它们的类型也相同)
title"> 代码如下:
//示例4
php
$a = '511203199106034578';
$b = '511203199106034579';
if ($a===$b) {
echo 'equal';
} else {
echo 'notEqual';
}
?>

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

大佬总结

以上是大佬教程为你收集整理的PHP容易被忽略而出错陷阱 数字与字符串比较全部内容,希望文章能够帮你解决PHP容易被忽略而出错陷阱 数字与字符串比较所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。