php的类型比较

php的类型比较

感觉好久没写代码了,基础知识忘了差不多了,所以最近准备撸一遍PHP的官方文档,看到基础类型之间的比较的时候,它们之前进行的隐式自动转换,看得我很是迷茫,感觉以前就没怎么细看,今天写出来做个参考。

<?php
var_dump(0 == 'all');       // true
var_dump(true == 'all');    // true
var_dump(0 == true);        // ?结果是什么鬼
?>

刚开始我有三大疑问

  1. 整型0为什么和字符串all相等
  2. 布尔型true为什么和字符串all相等
  3. 上面两个表达式的结果都是true了,为什么整型0和布尔型true不相等。

先不说为什么是这个结果,先说说==比较运算符,官方给出的解释为:
$a == $b 等于 TRUE,如果类型转换后 $a 等于 $b。

上面隐含的意思是,等号两边对比之前可能会进行类型转换,这也是==和===的区别,==判断的是(转换后)值是否相等,===判断值和类型是否全相等。

(1)、0 == ‘all’ //true
官网解释
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。

于是乎也就不难理解了,0是整型数字,’all’是字符串,两者比较之前,字符串’all’转化为整型,也就是0,所以相等为true

(2)、true == ‘all’ //true
其实这些类型比较看多了,容易看懵逼,之前我看完上一个之后再看这个就是那样,上一个例子里面’all’隐式转换为了0,如果应用到这个里面, true == 0 结果怎么可能是真。
官方解释:还是上一个地址
真相
当一个运算数是布尔型,一个是其它类型时,其他类型会转换为bool布尔型后再做比较,所以,既然字符串’all’非空字符串,非0字符串,自然’all’转换成布尔型为true, true == true 结果自然为真。

(3)、0 == true //false
其实这个就没必要来看了,上面已经做了解释了,只是当时上面的两个例子给搞懵逼了,也不知道这个该如何判断了,且不可认为,因为’all’和0相等,’all’和true相等,那么0 == true就相等了。就像是那句话,因为我(男)喜欢一个她(女),她喜欢他,那么我(男)喜欢他(男),不存在的。。。
好吧,这里既然等号右边为布尔型,那么整型0应该先转换为布尔型(false),然后与true做对比,结果为false。

其实坑还有很多,等以后收集好了再发出来。

上面这些纯属个人理解,欢迎指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值