三个要点:
- 当比较双方同类型时二者没有区别
- 当双方类型不一致时,==的比较结果无法预知,===为false
- null也是一种类型
先来个样例
if(1 == "1"){
echo "1 == 1 is true".PHP_EOL;
}else{
echo "1 == 1 is false".PHP_EOL;
}
他的输出结果将是true,此时你一定觉得没毛病,PHP时弱类型的语言,1就是等于"1",但是我们通常不建议这么做,原因请看下面的实例
if(1 == true){
echo "1 == true is true" . PHP_EOL
. "gettype(1) == "
. gettype(1) . PHP_EOL
. "gettype(true) == "
. gettype(true)
. PHP_EOL . PHP_EOL;
}else{
echo "1 == true is false" . PHP_EOL;
}
if("test" == 0){
echo "test == 0 is true" . PHP_EOL
. "gettype(\"test\") == "
. gettype("test") . PHP_EOL
. "gettype(0) == "
. gettype(0)
. PHP_EOL . PHP_EOL;
}else{
echo "test == 0 is false".PHP_EOL;
}
注释:gettype(var)能够以字符串的形式返回var的数据类型
上方代码输出结果如下
1 == true is true
gettype(1) == integer
gettype(true) == boolean
test == 0 is true
gettype("test") == string
gettype(0) == integer
看到上面1 == true没毛病,但是他们两个的类型时不一样的,true时boolean类型,php中任何数值非零即为true,0为false。因此就引入了上面样例中第二部分代码和第二部分输出的问题,由于0为false,而字符串参与比较时,由于无法直接与boolean比较,string都将被处理为0,这时候,所有的string都将被处理为0。
此外,你如果尝试(0 == null)他将为true,但是 "test" == null却为false。因此看得出来,即使a==b,b==c,但a==c是不确定的,因此,为了养成良好的变成习惯,避免出现不可预知的错误,我们应该尽量使用===。
===的三个要点:
- 两者类型不等为false
- 两者值不等为false
- 两者类型和值都相等为true