php弱类型比较,php弱类型比较

var_dump(0) //int(0)

var_dump('0') //string(1) "0"

var_dump('ssddsd') //string(7) "sasadad"

var_dump(0=='sdfsdf') // bool(true)

var_dump('0'=='sdfsf') //bool(false)

在上面这些比较中为什么var_dump(0=='sdfsdf') // bool(true)而var_dump('0'=='sdfsf') //bool(false)

我认为的是0是整形,和字符型'sdfsf'比较应该是false。。。。

为什么实际结果却是相反的,我哪里理解错了么???

回复内容:

var_dump(0) //int(0)

var_dump('0') //string(1) "0"

var_dump('ssddsd') //string(7) "sasadad"

var_dump(0=='sdfsdf') // bool(true)

var_dump('0'=='sdfsf') //bool(false)

在上面这些比较中为什么var_dump(0=='sdfsdf') // bool(true)而var_dump('0'=='sdfsf') //bool(false)

我认为的是0是整形,和字符型'sdfsf'比较应该是false。。。。

为什么实际结果却是相反的,我哪里理解错了么???

var_dump(0=='sdfsdf')

当处理这句时,不同类型比较'sdfsdf'会被强制转换成int型,也就是int 0,所以结果是true

var_dump('0'=='sdfsf')

当处理这句时,相同类型比较直接比较内容,内容不一样,所以结果是false

你可以试试var_dump((int)("sdfsf"));结果是int 0

https://segmentfault.com/q/1010000000095573/a-1020000000098176

至于后面那个为啥错误的… 这个还需要说明么… 判断相等首要的因素是内容要相等,只是 == 非严格模式会帮我们自动将两者的类型转换成一致的而已。字符串内容都不同你到底是为啥会觉得相等的…

你理解错了。

比较运算符直接的转换 是:整数和字符串比较,字符串转为整数,那么字符串sdfsdf就转为整数0了,所以第三条是true。

第四条是true因为他们都是字符串,所以就直接比较了,那么字符串0和sdfsf自然不等,为false

==比较只比较值,不同类型会转换为同一类型比较。

要比较类型用===,必须值和类型都一样才为true。

这些官方文档里都有写的,请仔细阅读文档。

var_dump(0=='sdfsdf'); 弱类型比较通常会先进行类型转换转为相同类型在进行值相等判断.

其中字符串和数值的比较规则是字符串转换成数字. 所以上面那个比较实际的进行可看作

var_dump(0 == (int)'sdfsdf');

var_dump('0'=='sdfsf');两个都是字符串就是比较值是否相等.

字符串和数字关键后会被转换成0,这样的现象在数据库中也会存在的

http://php.net/manual/zh/language.operators.comparison.php

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,

则字符串会被转换为数值并且比较按照数值来进行.此规则也适用于switch语句.

当用===或!==进行比较时则不进行类型转换,因为此时类型和数值都要比对.

PHP中字符串跟数字比较时,字符串会被转化为数字后进行比较,转化过程类似intval():

echo intval('5stars'); 输出5

print_r('5stars'==5); 输出1

var_dump('5stars'==5); 输出bool(true)

var_dump('5stars'===5); 输出bool(false)

var_dump('0e1'=='0e2'); 输出bool(true)

var_dump('0e1'==='0e2'); 输出bool(false)

PHP中比较字符串应该用恒等于===或者strcmp.

相关标签:php

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值