【问题标题】:strange boolean expression solving in phpphp中奇怪的布尔表达式解决
【发布时间】:2010-10-26 11:28:28
【问题描述】:
$foo = 0;

if($foo == 'on') $foo = 1;

echo $foo;

上面的代码应该会输出“0”。然而它没有,不知何故$foo == 'on' 导致TRUE,尽管这显然是错误的。将表达式替换为 $foo === 'on' 给出了正确答案,因此任何怀疑这可能是一些打字问题似乎都得到了证实。

尽管如此,如果 $foo'on' 甚至不是同一类型,PHP 怎么会认为 $foo'on'?这是一个错误还是一些奇怪的功能?

【问题讨论】:

    标签: php types boolean


    【解决方案1】:

    在 php 中是字符串的松散比较 (==) 和 int 0 评估为 True。虽然严格比较 (===) 也会比较相同的类型,这意味着如果展位变量是字符串或整数,则会进行比较。但这被评估为假,因为 $foo 是一个 int 而 'on' 是一个字符串。 另请参阅 php.net 上的比较表:http://php.net/types.comparisons

    【讨论】:

      【解决方案2】:

      this is a documented behaviour:

      如果将整数与字符串进行比较,则字符串将转换为数字。如果比较两个数字字符串,它们将作为整数进行比较。这些规则也适用于 switch 语句。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        • 1970-01-01
        • 2013-09-03
        • 1970-01-01
        • 2021-12-31
        • 2012-01-14
        • 2013-07-13
        相关资源
        最近更新 更多