PHP下==与===区别

来源:互联网 发布:平面图转换立体图软件 编辑:程序博客网 时间:2024/06/05 02:54
三个要点:
  • 当比较双方同类型时二者没有区别
  • 当双方类型不一致时,==的比较结果无法预知,===为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
原创粉丝点击