PHP关于比较运算符 == 问题,字符串和数字的比较问题

[ 2018-12-07 08:52:35 | 作者: admin ]
字号: | |
.p.s.最好是转为相同的类型再比较,都转成字符串或者数字


1、==符号是自动转成相同的类型后再进行
例如:
$a = 9;
$b = '9b27c7138797df11684414916a4138e0' ;
echo ($a==$b);
结果是 1 ,因为$b被自动转类型了 $b = intval('9b27c7138797df11684414916a4138e0' )=9
另外 echo ("太平"==0) 结果也是1,所以涉及到不同类型字符串比较一定看看是否会出现没有想到的问题



2、==运算符的大数据溢出问题,如果大于16位会溢出,需要使用===替代
例如:全是17位,结果不一定会正确
var_dump("14210022800015700"=="14210022800015701"); //bool(true)
var_dump("14210022800015701"=="14210022800015702"); //bool(false)
var_dump("14210022800015702"=="14210022800015703"); //bool(false)
var_dump("14210022800015703"=="14210022800015704"); //bool(true)
var_dump("14210022800015704"=="14210022800015705"); //bool(true)
var_dump("14210022800015705"=="14210022800015706"); //bool(false)
var_dump("14210022800015706"=="14210022800015707"); //bool(false)
var_dump("14210022800015707"=="14210022800015708"); //bool(true)
var_dump("14210022800015708"=="14210022800015709"); //bool(true)

例如:全是16位,结果正确
var_dump('1421002280001570' == '1421002280001571');
var_dump('1421002280001571' == '1421002280001572');
var_dump('1421002280001572' == '1421002280001573');
var_dump('1421002280001573' == '1421002280001574');
var_dump('1421002280001574' == '1421002280001575');
var_dump('1421002280001575' == '1421002280001576');
var_dump('1421002280001576' == '1421002280001577');
var_dump('1421002280001577' == '1421002280001578');
var_dump('1421002280001578' == '1421002280001579');
结果:bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)
[最后修改由 admin, 于 2022-11-04 15:33:10]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2552

这篇日志没有评论。

此日志不可发表评论。