三个要点:

  • 当比较双方同类型时二者没有区别

  • 当双方类型不一致时,==的比较结果无法预知,===为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


FUNCO_小风
48 声望4 粉丝

爱折腾,爱技术,爱后端也爱前端,爱安卓也爱web,爱php也爱java。还喜欢玩玩开源硬件。现在公开招募有共同爱好的机油~~~~