if ("false" == 0) echo "true\n";
// => true
虽然PHP文档说:
var_dump((bool) "false"); // bool(true)
如果是我可以提交的错误吗?
答案 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认为错误的唯一内容:
尽量避免对文本进行字符串比较并坚持使用布尔值!