PHP空var == 0?

时间:2012-03-17 04:42:21

标签: php variables evaluation

在php 5中

  $my_var = "";

  if ($my_var == 0) {
    echo "my_var equals 0";

  }

为什么评估为真?在php.net中有关于它的一些参考吗?

5 个答案:

答案 0 :(得分:3)

PHP is a weakly typed language。当使用相等的运算符==进行测试时,空字符串和布尔值false将计算为0。另一方面,您可以强制它使用相同的运算符===来检查类型:

$my_var = "";

if ($my_var === 0) {
   echo "my_var equals 0";
} else {
   echo "my_var does not equal 0";
}

这应该会为您提供有关该主题的大量信息:How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?

答案 1 :(得分:3)

字符串和整数不能与==直接比较。所以PHP执行类型杂耍,看看是否有另一个合理的比较可用。

将字符串与整数进行比较时,首先将字符串转换为整数。您可以找到转化的详细信息here。基本上,由于""不是有效数字,因此转化的结果为0。因此,比较变为0 == 0,这显然是正确的。

您可能希望对大多数(如果不是全部)比较使用身份比较===

答案 2 :(得分:1)

在第一行中,您将$my_var定义为字符串。

在比较中,您将该变量与常数整数进行比较。

如果你想要精确比较(我不知道为什么你需要将一个字符串与没有任何强制转换的整数进行比较),你应该使用===

if ($my_var === 0) {
  echo "my_var equals 0";
}

这永远不会回应信息。

PHP手册在Comparison Operators section中定义,运算符==为:

  

如果$ j在类型杂耍之后等于$ b,则为TRUE。

所以,重要的是type juggling

事实上,在PHP Manual: types comparisons中,第二个表格确切地告诉您整数0等于字符串""

答案 3 :(得分:1)

这是由于你使用的等式运算符产生的类型强制。

PHP manual有类型比较表来阐明这一点。

通常认为使用相同的运算符===是一种很好的做法,以避免出现这种转角(?)的情况。

答案 4 :(得分:0)

这是php手册中有关布尔值的参考

http://www.php.net/manual/en/language.types.boolean.php

这里是NULL值的引用

http://www.php.net/manual/en/language.types.null.php

$my_var = '';

if ($my_var == 0) {
    echo "my_var equals 0"
}

评估为真,因为""与NULL相同,其值为false或0