if ("false" == 0) echo "true\n";
// => true
虽然 PHP 文档说:
var_dump((bool) "false"); // bool(true)
如果是错误,我可以在哪里提交?
if ("false" == 0) echo "true\n";
// => true
虽然 PHP 文档说:
var_dump((bool) "false"); // bool(true)
如果是错误,我可以在哪里提交?
不,不是错误。不要费心去归档。
这种看似矛盾的行为与“假”二字无关。它与只包含字母且没有数字数字的字符串有关,因此当它被转换为整数进行比较 ( == 0
) 时,结果为 0,从而0 == 0
计算结果为真。
如果您将任何其他字母字符串与 0 进行比较,您将得到相同的结果:
"abcd" == 0
"a" == 0
"true" == 0
这不是一个错误,在比较不同数据类型的值时,它是一个有据可查的特性——在这种情况下,是字符串到整数。PHP 将字符串转换为整数进行比较,“false”转换为 0。
请参阅手册:
如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较。
和这个关于字符串到数字转换的页面
如果字符串以有效的数字数据开头,这将是使用的值。否则,该值将为 0(零)。
要避免这种行为,请使用严格类型的比较:
if ("false" === 0) echo "true\n";
问题是 PHP 会强制转换变量,除非您使用严格的比较。正如其他人提到的,字符串"false"
被转换为整数。
如果您想在不进行类型转换的情况下进行比较,请使用:
"false" === 0
这可能会有所帮助:这些是 PHP 认为错误的唯一事情:
尽量避免文本的字符串比较并坚持使用布尔值!