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 >
php > $a = "12abc";
php > switch($a){ case "12": echo "equl 12";break; default: echo "not 12";}
not 12
如此比较便可,至于双等号。其他异常情况还有很多,此处也不作穷举,原则有一,如果不是确定万无一失的情况下,尽量使用全等号来作变量的比较。