【问题标题】:Comparison Operator - Type Juggling and Booleans比较运算符 - 类型杂耍和布尔值
【发布时间】:2012-02-22 09:18:13
【问题描述】:

我一直在阅读有关 Type Juggling 和 Booleans 的 PHP 文档,但我仍然不明白为什么这个比较结果为真。我的 [不正确] 理解告诉我,在下面的 if 语句中,整数 0 被认为是 FALSE,而作为非空字符串的“a”被认为是 真的。因此,我希望这种比较能够解析为 FALSE == TRUE 并最终解析为 FALSE。我错在哪一部分?

   <?php
            if(0 == "a"){
                    $result = "TRUE";
            }else{
                    $result = "FALSE";
            }

            //$result == "TRUE"
    ?>

http://codepad.viper-7.com/EjxBF5

【问题讨论】:

    标签: php


    【解决方案1】:

    当 PHP 进行字符串 整数比较时,它会尝试以智能方式将字符串转换为数字。假设是,如果您有一个字符串“42”,那么您希望将 value 42 与另一个整数进行比较。当字符串不以数字开头时,其值为零。

    来自the docs

    该值由字符串的初始部分给出。如果字符串以有效的数字数据开头,这将是使用的值。否则,该值将为 0(零)。

    comparison docs 中也推断出这种行为(请看第一个示例中的第一行)。

    【讨论】:

    • 感谢您回答我的问题并帮助我理解。
    【解决方案2】:

    如果您使用严格比较 === 而不是 ==,它将起作用。严格比较也会检查变量的类型,所以0 === 'a' 会是假的。

    【讨论】:

      【解决方案3】:

      您的错误是您假设operator == 在比较它们之前将其每个操作数强制为布尔值。它没有这样的事情。

      发生的情况是,由于您是comparing an integer to a string,字符串被转换为整数(在本例中为"a" converts to 0),然后执行比较0 == 0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 2013-03-26
        • 1970-01-01
        • 2010-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多