【问题标题】:Why is 1 == '1,2' true? [duplicate]为什么 1 == '1,2' 为真? [复制]
【发布时间】:2014-03-14 06:05:27
【问题描述】:

只是好奇这种情况下 PHP 类型转换是如何工作的。

var_dump(1 == '1,2') // boolean(true)

【问题讨论】:

  • (与var_dump无关,只是你观察结果的方式。)

标签: php types int equals


【解决方案1】:

那是因为这里 1 是一个整数,当它与一个字符串 1,2 比较时,这个字符串将被转换为一个整数,它返回 1.

转换字符串1,2如何返回1?

echo int('1,2'); // prints 1 

因此,当它与您的 1 进行比较时,这显然会在您的 var_dump 上返回 true

来自 PHP Docs..(基本比较测试)

如果您将数字与字符串进行比较,或者比较涉及 数字字符串,然后将每个字符串转换为数字,然后 以数字方式进行比较。

Source

【讨论】:

    【解决方案2】:
    1. 解释为:

      var_dump(1 === (int) '1,2');
      
    2. "1,2" 转换为 int 将返回 1,因为在最后一个解析数字之后的任何内容都将被截断(在这种情况下为 ,2)。

    3. 记住逗号(,)不是小数点分隔符,点(.)是:

      var_dump((float) '1,3', (float) '1.3');
      

      结果:

      (float) 1
      (float) 1.3
      

    转换通常非常不直观,这就是为什么您应该几乎总是使用=== 运算符,它不会创建转换。

    【讨论】:

      【解决方案3】:

      如果您使用==,php 会将右侧值类型转换为左侧值。 在这种情况下,'1,2' 将被类型转换为 1 并返回 true。

      即使var_dump( 1== "1dfuiekjdfdsfdsfdsfdsfsdfasfsadf" ); 也会返回 true。

      【讨论】:

        猜你喜欢
        • 2013-07-25
        • 2016-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        相关资源
        最近更新 更多