这是代码:
$s = 0;
$d = "dd";
if ($s == $d) {
var_dump($s);
die(var_dump($d));
}
结果是:
int 0
string 'dd' (length=2)
请解释原因。
为什么($s == $d)
的结果为真?
当然,如果使用===
,则会导致错误,但为什么这种情况需要===
?
在两种情况下都不应该返回错误吗?
答案 0 :(得分:4)
因为(int)$d
等于0
和0=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 operators和type 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
。
因此他们是平等的。