“===”是什么意思?

56
我注意到有人使用PHP运算符===,但我无法理解其含义。 我已经尝试将其用于函数中,但它的行为方式非常奇怪。
这个运算符的定义是什么? 我甚至无法在PHP运算符的声明中找到它。
10个回答

69
$a === $b     (Identical)      
如果$a等于$b,并且它们的类型相同,则返回TRUE。(在PHP 4中引入)

PHP文档


3
请注意,这个等于运算符也出现在 JavaScript 和 Perl 中。它相当常见。 - Samantha Branham
13
需要注意的是,== 运算符也被称为“我能从这里榨取什么”的运算符,因为它会产生一些奇怪的结果,例如 "100" == "1e2" 和 0 == "one"。 - Ants Aasma
1
虽然我对 PHP 不是很了解,但我知道 100 = 1e2 (10*10^2),但是 "0" == "one" 是什么意思我就不太明白了。有谁能向我解释一下吗? - Ksempac
4
我认为他的意思是 "1" == "one"。 == 运算符就像是告诉 PHP,它可以处理左右两个表达式,使得它们的值相等。=== 就像是在说,对这里的内容进行二进制比较。 - Dykam
2
@Ksempac:第二个字符串“one”不能被解析为数字1,而是数字0,因此它们相等。 - Tim Sylvester
显示剩余4条评论

59

http://www.php.net/ternary

$a == $b 相等 如果$a和$b相等,则返回TRUE,但注意(True == -1)依然为True。

$a === $b 全等 如果$a和$b相等且类型也相同,则返回TRUE。

> "5" == 5;
True
> "5" === 5;
False

不正确。如果$a和$b是同一类的对象,并且它们的所有(各自的)属性具有相同的值,则三个等号返回false。亲自试试:class FirstClass { public $a; public $b; function FirstClass() { $this -> a = 1; $this -> b = 1; } } $first = new FirstClass(); $second = new FirstClass(); if($first === $second) { echo "triple equal!"; } else { echo "triple not equal!"; } - Vladimir Despotovic
Dykam,正是我的观点 - 但我并没有进行任何比较。我只是说,在对象的情况下,通过 === 进行比较的不是 VALUE,而是实际引用。也就是说,它们可以是完全相同的对象,即所有值都完全相同,但 === 仍然显示为 false,因为它们不是相同的引用。 - Vladimir Despotovic
1
你说:$a === $b 如果 $a 等于 $b 并且它们是相同类型,则完全相同为 TRUE。我只能说这根本不是真的。句号。 - Vladimir Despotovic
简单地从php.net复制粘贴并不总是正确的。 - Vladimir Despotovic
如果它们实际上是同一个对象,它们将比较良好。比较的是引用的值,而不是它所指向的实例。如果有什么区别,那只是定义的问题,但这是我遇到过的最常见的定义。 - Dykam
"$a === $b 相同,如果 $a 等于 $b 并且它们的类型相同。它们都是引用,属于相同的类型,因此,gettype($first) === "object",而不是 "FirstClass" 或任何其他类型。更多文档请参见:http://php.net/manual/zh/language.oop5.object-comparison.php 如果有什么区别,== 就像通常一样,进行基于实例值的比较。" - Dykam

12

您可以在这里阅读,简要概述如下:

$a == $b 相等 如果 $a 经过强制类型转换后等于 $b,则返回 TRUE。

$a === $b 全等 如果 $a 等于 $b 并且它们的类型相同,则返回 TRUE。


我现在感觉相当愚蠢,你这么快就找到了它,我试着谷歌搜索但没有太大的成功...无论如何还是谢谢大家。 - Stefan Konno
2
在php.net上,你可以找到关于PHP的99%问题的答案。 - Artem Barger

12

在PHP中,你可以使用==或===运算符来比较两个值。二者的区别在于:

PHP是一种动态解释型语言,对数据类型不严格。这意味着,语言本身会尝试在需要时转换数据类型。

echo 4 + "2"; // output is 6
输出的是整数值6,因为在PHP中,加号(+)是数字加法运算符,所以如果给它提供其他数据类型的操作数,PHP将首先将它们转换为相应的类型("2"将被转换为2),然后执行操作。
如果您使用 == 作为比较运算符,并且两个操作数可能是不同的数据类型,则PHP将把第二个操作数类型转换为第一个操作数的类型。所以:
4 == "4" // true PHP将"4"转换为4,然后比较这两个值。在这种情况下,结果将为true。
如果您使用 === 作为比较运算符,PHP将不尝试转换任何数据类型。所以如果操作数的类型不同,则它们不相同。
4 === "4" // false

7

$x == $y 为真,如果 $x 和 $y 的值相同:

$x = 1; //int type
$y = "1"; //string type
if ($x == $y) {
    // This will execute
}

$x === $y 如果$x和$y的值相同且类型相同,则为TRUE:

$x = 1; //int type
$y = "1"; //string type
if ($x === $y) {
    // This will not execute
}

4

你会在许多动态类型语言中看到这个运算符,不仅仅是 PHP。

== 会尝试将其处理的任何内容转换为可以进行比较的类型。

=== 将严格比较类型和值。

在任何动态类型语言中,您都必须小心使用 ==,否则可能会出现一些有趣的错误。

三元 === 不太方便,但更加安全。在比较时,您应该始终考虑是否应该使用 =====


3
三个等号符号 === 用于检查两个变量是否相等且类型相同。

1

看看我在谷歌上搜索“PHP三等号运算符”得到的PHP中的双等号和三等号运算符

其中有一段说:

双等号是比较运算符,用于测试左侧的变量/表达式/常量是否与右侧的变量/表达式/常量具有相同的值。

三等号是比较运算符,用于检查两个变量/表达式/常量是否相等且类型相同 - 即都是字符串或都是整数。

它还给出了一个例子来解释它。


1

对于 PHP 来说,零有许多不同的含义

  1. 它可以是布尔值 false
  2. 它可以是 null 值
  3. 它也可能真的是零

因此,添加 === 可以确保类型和值相同。


0

"===" 匹配变量的值和数据类型。


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