【问题标题】:PHP String - int comparisonPHP String - int 比较
【发布时间】:2012-03-17 02:39:23
【问题描述】:

任何人都知道为什么在 php 中

var_dump( "cat" == 0 );

评估为真?我也意识到:

var_dump( "cat" === 0 );

有预期的结果,但很好奇为什么第一种情况会是真的。这也是 php 5.3。

【问题讨论】:

标签: php


【解决方案1】:

字符串被隐式转换为整数。见documentation

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

【讨论】:

    【解决方案2】:

    PHP 手册中有一个类型comparison table,它让您了解比较两种不同数据类型的变量时会发生什么。

    您的第一个示例(“松散”比较,因为它不检查两个操作数的数据类型)隐式地将左侧的字符串转换为整数。由于它不是以数字开头,所以字符串被转换为整数0,它等于整数0。

    您的第二个示例不仅比较了值,还比较了类型。由于类型不同,所以比较为假。

    【讨论】:

      【解决方案3】:

      因为您将字符串隐式转换为整数,并且由于字符串不包含数字,所以它被转换为 0

      【讨论】:

        【解决方案4】:

        "cat" 是一个整数到 0,这就是为什么它是真的

        但是如果你输入了

        var_dump( "01" == 0 );
        

        它会是假的,因为 1 不等于 0

        【讨论】:

        • 您的表达式实际上计算为真。 cat1 转换为 0。字符串需要以一个整数开始才能转换为该整数。
        猜你喜欢
        • 2012-04-18
        • 2016-01-28
        • 2015-11-06
        • 2020-10-14
        • 1970-01-01
        • 2015-07-29
        • 2020-10-15
        • 2017-05-09
        • 2020-01-21
        相关资源
        最近更新 更多