区分php的比较运算符:==和===

在php中,定义了一组比较运算符,其中比较容易混淆的是==, !=, ===, !==这四个。在php规范中,比较运算符仅适用于数值或字符串两种类型的比较。由于php并不是一种从语法上严格类型检查的编程语言,在比较的过程中,如果两个比较对象的类型不同时,就会形成互相转换,更明确的说,字符串类型会被转义为数值类型。所以使用==和!=进行字符串比较就会非常危险。因为如果代码控制不好的情况下,就会出现字符串与数字比较的情况,尤其是与0比较的情况非常常见,这样的情况下,会出现非常多意外的逻辑错误。


举例说明:


例1:


<code>$test_string="01";
var_dump($test_string == 1);</code>


会输出: bool(true),原因是$test_string被类型转换为int,值为1。


例2:


<code>$test_string="test";
var_dump($test_string == 1);</code>


会输出:bool(false),原因是$test_string被类型转换为int,值为0。


例3:
<code>$test_string="test";
var_dump($test_string == 0);</code>


会输出:bool(true),这个是最常出现的错误,$test_string被转换为0,进行值比较,与0一致。


对!=是同理的,是进行值的比较,在比较的时候会进行类型转换。


为了避免这种情况,就需要使用===和!==,这种情况下,php会比较两个对象是否是完全一致的,也就是说,不会进行类型转换,是对象内容的直接比较。


例4:
<code>$test_string="test";
var_dump($test_string === 0);</code>


会输出:bool(false),因为从对象内容上,完全不同,与传统的比较结果是一致的。


例5:
<code>$test_string="test";
var_dump($test_string === "test");</code>


会输出:bool(true),因为值的内容是完全一致的。


所以如果比较两个字符串是否值相同,或不同,建议使用===和!==,会更加安全。同样也可以使用strcmp,也会比==与!=安全了很多。


典型的错误情况如:
http://stackoverflow.com/questions/26213965/php-if-sentence-is-run-but-dumps-says-it-shouldnt

等等。

转载请注明来源自: www.candylog.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值