php变量比较== vs ===

时间:2012-09-14 09:04:09

标签: php

这是代码:

$s = 0;
$d = "dd";

if ($s == $d) {
    var_dump($s);
    die(var_dump($d));
}

结果是:

int 0

string 'dd' (length=2)

请解释原因。

为什么($s == $d)的结果为真?

当然,如果使用===,则会导致错误,但为什么这种情况需要===? 在两种情况下都不应该返回错误吗?

6 个答案:

答案 0 :(得分:4)

因为(int)$d等于00=0

===

的不同字符标记(string),您必须使用严格比较(int)

您的$d会自动转换为(int),以便进行比较。

答案 1 :(得分:4)

将数字与字符串进行比较时,首先将字符串类型变为数字。在这种情况下,dd最终会变成0,这意味着它等同于真(0==0)

将代码更改为:

 <?php 
 $s = 1;
 $d = "dd";
 if ($s == $d)
 {
    var_dump($s);
    die(var_dump($d));
 }
 ?>

你会发现它根本没有通过if声明。

您可以通过阅读comparison operatorstype juggling来了解更多详情。

答案 2 :(得分:2)

字符串“dd”转换为int,因此为0。

另一个例子:

if ( "3kids" == 3 )
{
      return true;
}

是的,这返回true,因为“3kids”被转换为3。

===不会自动将项目转换为相同的类型。

另外:0 == false是正确的,但0 === false不是。

请参阅:http://php.net/manual/en/language.types.type-juggling.php

答案 3 :(得分:2)

该字符串将尝试解析为数字,如果数字格式不正确,则返回0

答案 4 :(得分:2)

如php网站所示: http://php.net/manual/en/language.operators.comparison.php

var_dump(0 == "a"); // 0 == 0 -> true

答案 5 :(得分:2)

在PHP中,==应该发音为“可能等于”。

==比较时,PHP会调整文件类型以尝试找到匹配项。

当一个没有数字的字符串在评估为int时被评估为0

因此他们是平等的。