今天,一个同学给出了这样一段代码,他说不好理解。
<?php
var_dump("1" == "01");
var_dump(0 == "a");
switch("a"){
case 0:
echo 0;
case "a":
echo "a";
}
输出结果为什么是 true ,true,0
我看了看,说把整个比较的过程调换下位置,变成下面这种形式。
<?php
var_dump("01" == "1");
var_dump("a" == 0);
switch("a"){
case "a":
echo "a";
case 0:
echo 0;
}
结果是true, false,a
对于
var_dump(0 == "a"); 输出 true
var_dump("a" == 0); 输出 false
我的理解是,由于php是弱变量类型,那么在进行值相等匹配时,会根据第一个扫描到的数进行类型匹配,
将两个数的类型都转为之前扫描到的数的类型后进行比较。
※ "a"转化为整形之后为 0
对于 var_dump("1" == "01");
和 var_dump("01" == "1");
输出结果都为true.我理解为编译器在进行编译时对代码进行的优化,也就是采用了一个机制对其进行了处理。
对于俩个字符串, 会首先判断他们是否是数字字符串,如果都是数字字符串的话,会先把他们转换为数字类型
再进行比较。
如果觉得难以理解,网上搜到了一篇文章,希望有帮助.
http://www.laruence.com/2009/02/21/662.html