比较运算符用来判断两个变量之间什么关系,是否相等,是否大于,是否小于。
返回值是布尔值,一般作用于需要条件判断的地方,比如if语句,在它的条件小括号里可以直接比较。
结果:
当进行大小比较时:小于、大于、等于
整数型、浮点型就不说了,没有异议,就按数字大小比较。下面我们具体分析下以下几种情况
1)当字符串大小比较时
结果:
总结下:
如果两边都是纯数字字符串,转为数字比较
如果一边有数字(整数型、浮点型),另一边转为数字比较。
如果有一边是字符串,另一边也是字符串或纯数字字符串,就按两边首个字符的ascii码对应的值比较,首字符一样,就往下比较,直到不一样分出大小。
细节:一边是浮点型字符串$a,一边是浮点型数字$b,$a务必用round函数精确转换成浮点型,不然有的时候两个小数看似一样,做判断时,却不一定相等。
2)当布尔值比较时
结果:
总结:如果两边有布尔值,均转为布尔值比较:规则:true > false
在实际开发中,主要用于数字、纯数字字符串比较,字符串、布尔值用得不多。
3)当进行相等比较时:等于、不等、全等、不全等
==:松散相等,比较的是两个数据“类型转换之后”是否有可能相等,也常常认为是“数据内容是否相同”
===:严格相等,全等,只有两个数据的类型和数据的内容都完全一致,才相等。
严重推荐参考手册〉〉附录〉〉类型比较表
举几个典型的例子:
var_dump('0' == '');//false 也是很容易出错的
总结下:
1、有一边是布尔值,其他类型会转成布尔值。数字0、字符串''、'0'转成布尔值false,其他数字、字符串转成布尔值true。
2、数值与字符串比较,字符串会转成数值型 (这句很重要,适用于php7及以下版本) 。
3、字符串与字符串比较,会比较两个字符串(包括其中一方是数字字符串)是否一样,如果两边都是纯数字字符串,会做数字比较。
(PHP 8 重要变动:比较数字字符串(numeric string)时,会按数字进行比较。 不是数字字符串时,将数字转化为字符串,按字符串比较。 0 == 'a' // false)
和数据变量比较大小一样,不同数据类型比较,会有一个类型的优先级:
布尔类型 > 数字类型(整数型、浮点型) > 字符串类型
两个数据变量做相等比较是非常常见的,大家一定要弄明白,不然很容易造成程序if语句出错的。最好是同一数据类型做相等比较,数字与数字,字符串与字符串,避免不同数据类型做相等比较。
数字比较时 谨防有数字字符串 最好对比较的两个变量强制转换为整数类型。
关于全等===,应该是很好理解的。整数型10与字符串10全等,返回布尔值假false。实际开发中,多用于场景:确定一个变量是布尔值false,而不是整数型0,空字符串。
全等===不是通用的比较运算符,不敢说只有PHP有这种比较运算符,反正在C、Java这样的强类型语言里,就没有全等===,因为它们不同数据类型是不能比较的。比如在C语言里,比较字符串是否一样,就不能用==,需要依靠其他方式做比较。