下面的代码的输出是"fail",但如果我们通过1 to $b as $b=1
那么它将输出为"pass"。谁能告诉我为什么这个 if 条件只适用于 0?
<?php
$a="abcd";
$b=0;
if($a == $b)
{
echo "fail";
}
else
{
echo "pass";
}
?>
那是因为PHP类型的杂耍==
运算符。这里给出了完整的表格。
因为您正在比较 2 个不同类型的变量,所以将转换 2 个变量中的一个。在这种情况下,字符串将转换为整数,对于不以数值开头的字符串,整数将为 0。
所以"abc" == 0
在 PHP 中,要添加类型检查使用"abc" === 0
来自PHP手册:
如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为一个数字,并以数字方式执行比较。当比较为 === 或 !== 时,不会进行类型转换,因为这涉及比较类型和值。
if($a==$b) {
echo "fail";
}
else {
echo "pass";
}
这将输出fail
.
但是,如果您使用相同的比较运算符 ===
,则不会进行类型转换:
if($a===$b) {
echo "fail";
}
else {
echo "pass";
}
这将输出通过。
有关更多详细信息,请参阅 PHP 手册中的类型杂耍文档。
你是类型杂耍的受害者。尝试使用相同的比较运算符 ===
,该运算符还会检查以确保变量的类型相同:
var_dump('abcd' === 0); // bool(false)