【问题标题】:checking if 0 is equal to any string always returns true检查 0 是否等于任何字符串总是返回 true
【发布时间】:2016-02-11 21:39:56
【问题描述】:

我在很多场合都遇到过这个 php “错误”,但我从来没有停下来处理它。所以这是我要求有人帮助我理解这一点:

$int = 0;
var_dump($int == "string");
var_dump(false == "string");
var_dump(false == $int);

【问题讨论】:

标签: php


【解决方案1】:

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

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

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

From this post

【讨论】:

    【解决方案2】:

    我们使用== 进行松散比较,使用=== 进行严格比较。

    $int = 0;
    var_dump($int === "string"); //false
    var_dump(false === "string"); //false
    var_dump(false === $int); //false
    

    【讨论】:

    • 我知道如何解决它我只是在问为什么,我在@divyesh-savaliya 分享的链接中找到了原因
    • 0 是一个 int,所以在这种情况下,它将把 'string' 转换为一个 int。哪个不可解析为 1,将变为 0。字符串 '0string' 将变为 0,并匹配!
    • false == 0 也是如此。将 0 解析为布尔值时,它变为 falsetrue == anyothernumber 也是如此
    【解决方案3】:

    在 PHP 中,== 运算符检查两个值是否相等 - 换句话说,PHP 将在需要时使用类型杂耍,但像 0 == false、1 == '1' 等将是 true。

    要检查两个值是否相同(包括类型),请使用 === 运算符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2016-12-21
      • 2013-10-17
      相关资源
      最近更新 更多