PHP中的===是什么意思?

5

我已经用PHP编程一段时间了,但我仍然不理解==和===之间的区别。我知道=是赋值,==是等于。那么===的目的是什么?

8个回答

26

它同时比较值和类型是否相等。

 if("45" === 45) //false
 if(45 === 45) //true
 if(0 === false)//false

它有一个类似的运算符: !==,用于比较类型和值的不等

 if("45" !== 45) //true
 if(45 !== 45) //false
 if(0 !== false)//true

这对于像strpos这样的函数特别有用 - 它可以有效地返回0。

 strpos("hello world", "hello") //0 is the position of "hello"

 //now you try and test if "hello" is in the string...

 if(strpos("hello world", "hello")) 
 //evaluates to false, even though hello is in the string

 if(strpos("hello world", "hello") !== false) 
 //correctly evaluates to true: 0 is not value- and type-equal to false

这里有一张好的维基百科表格,列出了其他具有三等号类比的语言。


在strpos的情况下,“false”/“true”的评论并不是非常清楚,但我猜你可以根据上下文理解得足够好。 - luiscubal
此外,由于Tom指出的结果,当评估返回值时,使用===或!==几乎总是更好的选择。即使该函数现在没有返回模糊值,但这种情况可能会在未来发生改变。 - Dana the Sane
我认为这是个很好的回答,但你在示例中使用的最后一行让我感到不舒服。在实际情况下,它不能/不应该像这样:if(strpos("hello world", "hello") >= 0)吗?(或类似的东西......我假设strpos要么返回-1,就像其他语言一样,要么可以以某种方式被捕获)。当然,那会破坏你回答的重点,所以我理解为什么它在那里,但我想知道人们何时可能会使用这种===或!==类型的功能。 - Beska
1
Beska,strpos返回的是布尔值false,而不是-1。(这也间接回答了你下一个问题,即人们何时可能使用它) - Alana Storm

12

虽然 === 比较值和类型,但有一种情况尚未提及,那就是使用 == 和 === 比较对象。

给定以下代码:

class TestClass {
  public $value;

  public function __construct($value) {
    $this->value = $value;
  }
}

$a = new TestClass("a");
$b = new TestClass("a");

var_dump($a == $b);  // true
var_dump($a === $b); // false

对于对象来说,=== 比较的是引用而不是类型和值(因为 $a 和 $b 都具有相等的类型和值)。


6
PHP手册中有几个非常好的表格("使用==进行宽松比较"和"使用===进行严格比较"),展示了在比较不同变量类型时,==和===将给出什么结果。请参考这里

4

它将检查数据类型和值是否相同

if ("21" == 21) // true
if ("21" === 21) // false

3

=== 比较值和类型。


2

“==”不会比较类型,而“===”会。

0 == false

评估为true,但是

0 === false


1
最少来说,=== 比 == 更快,因为没有自动转换发生,但是这种差别非常微小,几乎不值得一提。(当然,我刚刚提到了它...)

0

这是一个真正的相等比较。

例如,"" == Falsetrue

"" === Falsefalse


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接