2

这是代码:

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

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

结果是:

int 0

string 'dd' (length=2)

请解释原因。

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

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

4

6 回答 6

4

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

您必须===对不同的字符类型(string)使用严格的比较(int)

$d会自动转换为(int)有可比较的东西。

于 2012-09-14T09:06:50.593 回答
4

当您将数字与字符串进行比较时,首先将字符串类型转换为数字。在这种情况下,dd最终会被处理成0这意味着它等于 true (0==0)

当您将代码更改为:

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

你会发现它根本没有通过if语句。

您可以通过阅读比较运算符类型 juggling来获得更多详细信息。

于 2012-09-14T09:07:47.253 回答
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

于 2012-09-14T09:07:12.617 回答
2

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

于 2012-09-14T09:07:30.167 回答
2

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

var_dump(0 == "a"); // 0 == 0 -> true
于 2012-09-14T09:07:48.090 回答
2

在 PHP 中,==应该发音为“Probably Equals”。

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

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

因此他们是平等的。

于 2012-09-14T09:07:54.033 回答