【问题标题】:PHP why is 0=='all' true? [duplicate]PHP 为什么 0=='all' 为真? [复制]
【发布时间】:2018-11-23 21:07:47
【问题描述】:

我正在阅读布尔值的 PHP 文档。

其中一个 cmets 说 0=='all' 为真。

http://php.net/manual/en/language.types.boolean.php#86809

我想知道它是如何变成真的。

文档说所有非空字符串都是真的,除了 '0'。

所以“所有”都是真的 和 0 为假。

false == true 应该是假的。

但是:

if(0=='all'){
    echo 'hello';
}else{
   echo 'how are you ';
}

打印“你好”。

【问题讨论】:

  • 使用了类型推断,导致表达式比较假和假。

标签: php


【解决方案1】:

由于左操作数是一个整数,php 尝试将第二个整数转换为整数。因此,当字符串的整数表示为零时,您将得到一个 true 返回。 如果您切换运算符,您将获得相同的结果。

正如 Bhumi 所说,如果您需要这种比较,请使用 ===

【讨论】:

    【解决方案2】:

    在 PHP 中,运算符 == 和 != 不比较类型。因此 PHP 会自动将 'all' 转换为整数,即 0。

    echo intval('all');
    

    您可以使用 === 运算符来检查类型:

    if(0 === 'all'){
        echo 'hello';
    }else{
       echo 'how are you ';
    }
    

    查看Loose comparisons 表。

    【讨论】:

      【解决方案3】:

      如果你将一个字符串作为条件放在一个 IF 语句中,它会被检查为不为空或'0',但如果你将它与一个整数(==、、...)进行比较,它会被转换为0 个整数值。

      if('all')
          echo 'this happens!';
      if('all'>0 || 'all'<0)
          echo 'this never happens!';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-25
        • 2011-05-03
        • 2014-12-18
        • 2017-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多