使用 == 和 === 测试相等性

Testing for equality using == and ===

提问人:QuentinJ 提问时间:8/9/2015 最后编辑:Mark BakerQuentinJ 更新时间:8/9/2015 访问量:102

问:

使用 PHP 有两种方法可以测试是否相等。在下面的情况下,哪种方法是正确的?

    settype($var,"integer");
    $var = 1;

    if ($var == 1)
         then return(true);
    else
         return(false);

    if ($var === 1)
         then return(true);
    else
         return(false);

他们都在比较相等性为 1。但是,第二个语句测试它们是否相同。1 是常量,$var 是设置为值 1 的整数变量。当然 ($var == 1) 更正确吗?请帮助我理解,因为 ($var === 1) 是将变量与常量进行比较。

PHP 等于 平等

评论

0赞 frz3993 8/9/2015
这是严格的比较。===
0赞 Toby Allen 8/9/2015
php Docs 很好地解释了这一点。
0赞 Mark Baker 8/9/2015
甚至常量也有一个数据类型

答:

1赞 Imran 8/9/2015 #1

== 比较变量的值是否相等,必要时进行类型转换。=== 检查两个变量是否属于同一类型且具有相同的值。例如,是真的,但1 == "1"1 === "1"false

在您的示例中,$var 是整数类型变量,1 是整数类型常量。实际上没有类型差异。常量在任何语言中都不是类型,它只是一个常量(不可更改)的值。常量可以是整数、双精度、字符串等类型。

有关差异的完整说明,请参见 PHP 手册链接:http://au.php.net/manual/en/language.operators.comparison.php

评论

0赞 QuentinJ 8/9/2015
我理解 == 和 === 的细微差别,但是正如您所说,=== 测试它们是否具有相同的值以及它们是否属于同一类型。在我的示例中,$var 是整数类型,1 是常量。因此,类型不同。这就是我试图理解的。
1赞 Mark Baker 8/9/2015
是的,是一个常数......它也是一个整数......常量值 将是一个字符串;常量 是整数数组。常量具有数据类型,就像变量一样1"1"[1]
0赞 QuentinJ 8/9/2015
谢谢,所以 === 比较了值和数据类型。
0赞 Imran 8/9/2015
是的,正如你所说。