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

虽然 PHP 文档说:

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

如果是错误,我可以在哪里提交?

4

4 回答 4

7

不,不是错误。不要费心去归档。

这种看似矛盾的行为与“假”二字无关。它与只包含字母且没有数字数字的字符串有关,因此当它被转换为整数进行比较 ( == 0) 时,结果为 0,从而0 == 0计算结果为真。

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

"abcd" == 0
"a" == 0
"true" == 0
于 2012-05-26T14:56:07.817 回答
5

这不是一个错误,在比较不同数据类型的值时,它是一个有据可查的特性——在这种情况下,是字符串到整数。PHP 将字符串转换为整数进行比较,“false”转换为 0。

请参阅手册

如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较。

和这个关于字符串到数字转换的页面

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

要避免这种行为,请使用严格类型的比较:

if ("false" === 0) echo "true\n";
于 2012-05-26T14:56:40.460 回答
0

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

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

"false" === 0
于 2012-05-26T15:05:02.343 回答
0

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

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

    于 2012-05-26T18:23:11.500 回答