这是一个PHP错误(“假”== 0)?

时间:2012-05-26 14:53:31

标签: php

if ("false" == 0) echo "true\n";
// => true

虽然PHP文档说:

var_dump((bool) "false");   // bool(true)

如果是我可以提交的错误吗?

4 个答案:

答案 0 :(得分:8)

不,不是错误。不要费心去做。

这种看似不一致的行为与“假”一词无关。它与您的字符串仅包含字母而不是数字有关,因此当它被转换为整数进行比较(== 0)时,它会导致0,使0 == 0的计算结果为真。

如果您将任何其他字母字符串与0进行比较,您将得到相同的结果:

"abcd" == 0
"a" == 0
"true" == 0

答案 1 :(得分:5)

这不是一个错误,在比较不同数据类型的值时,这是一个记录良好的功能 - 在这种情况下,字符串为整数。 PHP将字符串转换为整数以进行比较,“false”转换为0。

请参阅the manual

  

如果您将数字与字符串进行比较或比较涉及   数字字符串,然后每个字符串转换为一个数字和   比较用数字表示。

此页面位于string to number conversion

  

如果字符串以有效数字数据开头,则这将是使用的值。否则,该值将为0(零)。

要避免此行为,请使用严格键入的比较:

if ("false" === 0) echo "true\n";

答案 2 :(得分:0)

问题是PHP会转换变量,除非您使用严格的比较。正如其他人提到的,字符串"false"被强制转换为整数。

如果你想在不使用类型转换的情况下进行比较:

"false" === 0

答案 3 :(得分:0)

这可能会有所帮助:这些是PHP认为错误的唯一内容:

  • 实际布尔值假
  • NULL值(空)
  • 整数0
  • 尽量避免对文本进行字符串比较并坚持使用布尔值!