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

5

8
http://www.php.net/manual/en/language.operators.comparison.php - mbeckish
8
遗憾的是,SO搜索引擎无法搜索 '===',因此每个月都会有人问这个问题。 - Paul Tomblin
1
@Paul 这里有关于 ===链接,以及关于 !==链接。这两个链接都有点重复,我投票将其作为第一个链接的重复问题关闭,希望其他人能够投票将其作为第二个链接的重复问题关闭(那些将其作为 NaRQ 关闭的人只是懒惰)。 - Michael Mrozek
1
@Paul Tomblin:你可能来这里的频率相当低 ;) - BoltClock
这里还有一个:“===”是什么意思? - Felix Kling
显示剩余3条评论
6个回答

13

它们是等价性运算符,而不是身份运算符。

1 == 1
1 == "1"
1 === 1
1 !== "1"
true === true
true !== "true"
true == "true"
所有这些等价于真。还要检查@mbeckish提供的此链接

2
我不会称其为identity(身份),因为两个具有不同identity的对象仍然可以具有相同的值和类型(因此在===操作符中是相等的)。在PHP中,就是没有identity(身份)这一概念。 - poke
这是等价运算符。它断言左右两个“参数”既相等又具有相同的类型(如果是对象,则为相同的类)。 - ircmaxell

6

它们是严格的类型比较运算符。它们不仅检查,还检查类型

考虑比较数字或字符串的情况:

if (4 === 4) // same value and type
{
  // true
}

但是
if (4 == "4") // same value and different type but == used
{
  // true
}

并且

if (4 === "4") // same value but different type
{
  // false
}

这同样适用于对象和数组。

因此,在上述情况下,您必须做出明智的选择,无论是使用 == 还是 ===

当您确定类型时,使用 === 是个好主意

更多信息:


1

=== 还会检查变量的类型。

例如,"1" == 1 返回 true,但 "1" === 1 返回 false。这对于可能返回 0 或 False(例如 strpos)的函数特别有用。

这样做是不正确的,因为 strpos 返回 0,而 0 == false。

if (strpos('hello', 'hello world!'))

然而,这将起作用:

if (strpos('hello', 'hello world!') !== false)

这个答案是正确的,但我要加一个例子。strpos("abcde", "f")返回false,因为字符串abcde中没有f。你可能想要测试一下,所以你会使用if (strpos("abcde", "f")===false)。如果你只是简单地做了if(!(strpos("abcde", "f"))),那么如果strpos实际上返回了0,你就会遇到麻烦。为什么?因为PHP是弱类型的,当不比较类型时,0false是等价的。 - Brad

0

当你使用两个等号==时,它会检查相同的值。

if( '1' == 1 ) { echo 'yes'; }

以上代码之所以有效,是因为它们具有相同的值。
但是,如果您使用三个等号 === ,它将检查值和数据类型。
因此,
if( '1' === 1 ) { /* this will not work */ }

这是因为'1'的数据类型是字符串,而1是一个整数数字

但你可以做类似于这样的事情 - 我想:D

if( (integer) '1' === 1 ) { echo 'this works'; }

因为我们正在将数据类型从'1'更改为整数


0

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

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

对于!==,也适用相同的概念。


0

只有在给定的值的类型和值都相等时,它们才会返回 true。 例如: 1 === 1 是 true "1" === 1 是 false 1 === "1" 是 false "1" === "1" 是 true

而使用 == 时,以上所有情况都是 true。


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