比较算子 - 类型杂耍和布尔

时间:2012-01-30 15:25:53

标签: php

我一直在阅读关于类型杂耍和布尔值的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

3 个答案:

答案 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。