这是代码:
$s = 0;
$d = "dd";
if ($s == $d) {
var_dump($s);
die(var_dump($d));
}
结果是:
int 0
string 'dd' (length=2)
请解释原因。
为什么($s == $d)
结果为真?
当然,如果===
使用它会导致错误,但为什么这种情况需要===
?在这两种情况下都不应该返回 false 吗?
这是代码:
$s = 0;
$d = "dd";
if ($s == $d) {
var_dump($s);
die(var_dump($d));
}
结果是:
int 0
string 'dd' (length=2)
请解释原因。
为什么($s == $d)
结果为真?
当然,如果===
使用它会导致错误,但为什么这种情况需要===
?在这两种情况下都不应该返回 false 吗?
因为(int)$d
等于0
和0=0
您必须===
对不同的字符类型(string)
使用严格的比较(int)
您$d
会自动转换为(int)
有可比较的东西。
当您将数字与字符串进行比较时,首先将字符串类型转换为数字。在这种情况下,dd
最终会被处理成0
这意味着它等于 true (0==0)
。
当您将代码更改为:
<?php
$s = 1;
$d = "dd";
if ($s == $d)
{
var_dump($s);
die(var_dump($d));
}
?>
你会发现它根本没有通过if
语句。
您可以通过阅读比较运算符和类型 juggling来获得更多详细信息。
字符串 "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
字符串将尝试解析为数字,0
如果数字格式不正确则返回。
如 php 网站所示:http: //php.net/manual/en/language.operators.comparison.php
var_dump(0 == "a"); // 0 == 0 -> true
在 PHP 中,==
应该发音为“Probably Equals”。
与 比较时==
,PHP 将调整文件类型以尝试找到匹配项。
一个没有数字的字符串,0
在评估为 int 时被评估为。
因此他们是平等的。