我一直在阅读关于Type Juggling和Booleans的PHP文档,但我仍然不明白为什么这个比较结果为true。我的[不正确]理解告诉我,在下面的if语句中,整数0被视为FALSE,而"a"作为非空字符串被视为TRUEALSE==TRUE,最终解析为FALSE。我错了哪一部分?
<?php
if(0 == "a"){
$result = "TRUE";
}else{
$result = "FALSE";
}
//$result == "TRUE"
?>
http://codepad.viper-7.com/EjxBF5
当PHP执行字符串时<=>整数比较,它试图以智能的方式将字符串转换为数字。假设您有一个字符串"42",则需要将值42与另一个整数进行比较。如果字符串不是以数字开头,则其值为零。
来自文档:
该值由字符串的初始部分给出。如果字符串以有效的数字数据开头,则这将是所使用的值。否则,该值将为0(零)。
在比较文档中也推断出了这种行为(参见第一个示例中的第一行)。
您的错误是假设operator ==
在比较它们之前将其每个操作数强制为布尔值。它没有这样的作用。
发生的情况是,由于您将整数与字符串进行比较,因此字符串将转换为整数(在本例中为"a" converts to 0
),然后执行比较0 == 0
。
如果使用严格比较===
而不是==
,它将起作用。严格的比较还会检查变量的类型,因此0 === 'a'
将为false。