php 双等号慎用

php 字符串强制转化成整型之后变为0, 双等号(==)和全等号(===)使用的大坑

       在php文档( http://www.php.net/manual/zh/language.operators.comparison.php )中有这样一段话: 如果比较一个整数和字符串,则字符串会被 转换为整数 。如果比较两个数字字符串,则作为整数比较。此规则也适用于  switch  语句。当然这指的是双等号,如果全等号的话,是连类型也在算在比较范围之内的。因而就对用过强类型语言如,C++、JAVA等习惯了使用双等号的朋友来说可能埋下了双等号使用的雷。如
        一个字母开头的字符串转化为整型后为0,一个以数字开头的字符串转化为整型后为开头到第一个字母之间的数,如:

php > $a = "abc";
php > echo intval($a);
0
php > $a="12kd332dk3";
php > echo intval($a);
12
php > 


       因此,下面语句就出现问题了:

php > switch($a){ case 12: echo "equl 12";break; default: echo "not 12";}
equl 12
php > $a = "abc";
php > if($a==0) echo $a;
abc
php >

        可见,switch中的比较也等同于双等号的比较,因此我们使用的该语句的时候,喝说php是弱类型的语言,也要注意类型的声明:

php > $a = "12abc";
php > switch($a){ case "12": echo "equl 12";break; default: echo "not 12";}
not 12

       如此比较便可,至于双等号。其他异常情况还有很多,此处也不作穷举,原则有一,如果不是确定万无一失的情况下,尽量使用全等号来作变量的比较。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值