如果条件在与字符串变量进行比较时仅对0为真

时间:2013-09-11 13:13:52

标签: php

下面代码的输出是“失败”,但如果我们通过1 to $b as $b=1,那么它将输出为“pass”。任何人都可以告诉我为什么这个条件只适用于0?

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

4 个答案:

答案 0 :(得分:1)

这是因为PHP type juggling==运算符。完整表格为here

答案 1 :(得分:1)

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

在PHP中使用"abc" == 0,使用"abc" === 0

添加类型检查

答案 2 :(得分:0)

你是类型杂耍的受害者。尝试使用identical comparison operator===,它还检查以确保变量的类型相同:

var_dump('abcd' === 0); // bool(false)

答案 3 :(得分:0)

来自PHP Manual

  

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

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

这将输出fail

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

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

这将输出传递。

有关更多详细信息,请参阅PHP手册中的type juggling文档。