我一直在阅读关于类型杂耍和布尔值的PHP文档,但我仍然不明白为什么这个比较评估为真。我的[不正确]理解告诉我,在下面的 if 语句中,整数0被认为是 FALSE 和“a”,作为非空字符串被视为 TRUE 。因此,我希望此比较解析为 FALSE == TRUE ,最终 FALSE 。哪个部分我错了?
<?php
if(0 == "a"){
$result = "TRUE";
}else{
$result = "FALSE";
}
//$result == "TRUE"
?>
答案 0 :(得分:9)
当PHP执行字符串&lt; =&gt;整数比较,它尝试以智能方式将字符串转换为数字。假设如果你有一个字符串“42”,那么你想要将值 42与另一个整数进行比较。当字符串不以数字开头时,则其值为零。
来自the docs:
该值由字符串的初始部分给出。如果字符串以有效数字数据开头,则这将是使用的值。否则,该值将为0(零)。
此行为也是在comparison docs中推断出来的(请看第一个示例中的第一行)。
答案 1 :(得分:4)
你的错误是你假设operator ==
在比较它们之前将每个操作数强制为布尔值。它没有这样的事情。
由于您是comparing an integer to a string,因此字符串将转换为整数(在本例中为"a" converts to 0
),然后执行比较0 == 0
。
答案 2 :(得分:2)
如果您使用严格比较===
而不是==
,则会有效。严格比较还会检查变量的类型,因此0 === 'a'
将为false。