php中不同类型变量之间比较大小
- 一、背景
- 二、探究0==''是为什么?
- 三、探究 0=='all'是为什么?
- 四、程序中如何判断0是否等于指定字符串
一、背景
最近在项目实际开发中,我需要判断前端传来的参数值是否等于一个字符串;然后发现当参数值是0时,在使用if($param == 'all')
时,永远是true的;
-
首先:
0==‘’, 0== null 是大家熟知的,但是 0=='all’为啥也为真嘞? -
那么先来看一下0==''是为什么?
二、探究0==''是为什么?
0==‘’ ??
在php运算中,0是整型,''是字符串;那么二者类型不一样,所以比较大小时,要先换成统一类型
基本类型相互比较时的自动转换的规则:
- string字符串跟int整形或者float浮点型比较,字符串自动转换为int 或者float
- bool类型跟其他类型做比较,均自动转换为bool类型然后进行比较
- int整形跟float浮点型比较,转换为float比较
根据这个规则,我们就知道空字符串转成了0,所以二者是相等的;
三、探究 0=='all’是为什么?
上面说过,在不同类型的变量比较大小时,要换成相同的类型才能比较,那这个字符串all换成整型是多少嘞?
查看php手册,可以看到这段话:
PHP手册参考地址
那什么是前导数字嘞,就是字符串最开始的位置是数字,比如’11frjef78’;它转成整型就是11,
所以根据手册可知,字符串’all’转成了整数0,所以 0=='all'是成立的
。
四、程序中如何判断0是否等于指定字符串
那我就想判断0是否等于字符串all,这时候可以写成===,大家都知道,三个等号判断时,是需要判断类型的,就解决了