现在的位置: 首页 > 综合 > 正文

php 双等号慎用

2013年02月10日 ⁄ 综合 ⁄ 共 749字 ⁄ 字号 评论关闭

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

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

抱歉!评论已关闭.