3

下面代码的输出是“失败”,但如果我们通过1 to $b as $b=1了,那么它会给出“通过”的输出。谁能告诉我为什么这个 if 条件只对 0 成立?

<?php 
      $a="abcd"; 
      $b=0; 
      if($a == $b)
      {
         echo "fail";
      } 
      else
      { 
         echo "pass";
      }
?>
4

4 回答 4

1

那是因为 PHP类型与操作符杂耍==。完整的表格在这里给出。

于 2013-09-11T13:16:40.007 回答
1

因为您正在比较 2 个不同类型的变量,所以 2 个变量中的一个将被转换。在这种情况下,字符串将被转换为整数,对于不以数值开头的字符串,该整数将为 0。

所以"abc" == 0在 PHP 中,添加类型检查使用"abc" === 0

于 2013-09-11T13:17:08.040 回答
0

来自PHP 手册

如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较。当比较是 === 或 !== 时不会发生类型转换,因为这涉及比较类型和值。

if($a==$b) { 
    echo "fail";
} 
else { 
    echo "pass";
}

这将输出fail.

但是,如果您使用相同的比较运算符===,则不会发生类型转换:

if($a===$b) { 
    echo "fail";
} 
else { 
    echo "pass";
}

这将输出通行证。

有关更多详细信息,请参阅 PHP 手册中的类型杂耍文档。

于 2013-09-11T13:21:36.967 回答
0

你是类型杂耍的受害者。尝试使用相同的比较运算符, ===,它还会检查以确保变量的类型相同:

var_dump('abcd' === 0); // bool(false)
于 2013-09-11T13:17:02.570 回答