因为PHP是弱类型语言,所以在类型转换时会进行隐性转换,从而产生一些副作用。
1.在进行比较逻辑运算时的转换规则:
一、如果比较一个整数和字符串,则字符串会被转换为整数。
字符串转换为整数的规则如下:
当一个字符串被当作数字来求值时,根据以下规则来决定结果的类型和值。
如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作 float 来求值。否则就被当作整数。
该值由字符串最前面的部分决定。如果字符串以合法的数字字符开始到非数字字符结束,就用该数字作为其值,否则其值为 0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字(可选地包括十进制分数),后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字。
代码如下:
<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump(1 == "01"); // 1 == 1 -> true;”01“转换为十进制的1
var_dump(1 =="1a"); //1==1 -> true
switch ("a") {
case 0:
echo "0";
break;
case "a": // never reached because "a" is already matched with 0
echo "a";
break;
}//因为"a"转换数字时为0,所以输出"0";
?>
二、如果比较的两个字符串中只有数字和非打印字符,则会忽略这些非打印字符后再转换为数字后再进行比较:
<?php
echo " \v\f \r 1234" + 1; // 1235
var_export ("\v\f \r 1234" == "1234"); // true
?>