类型杂耍和布尔人

我一直在阅读类型杂耍和布尔的PHP文档,但我仍然不明白为什么这个比较评估为真。 我的[不正确]理解告诉我,在下面的if语句中,整数0被认为是FALSE,而“a”是非空字符串被认为是TRUE。 因此,我预计这个比较将解析为FALSE == 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'将是错误的。

链接地址: http://www.djcxy.com/p/58543.html

上一篇: Type Juggling and Booleans

下一篇: Lesser than or greater than in Swift switch statement