2010-11-02 30 views
5

可能重复:
How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?
Reference - What does this symbol mean in PHP?
php not equal to != and !==什么做!==和===在PHP中是什么意思?

什么!=====运营商在此代码段?

if ($a !== null) // do something 
if ($b === $a) // do something 
+8

http://www.php.net/manual/en/language.operators.comparison.php – mbeckish 2010-11-02 17:30:51

+8

这真的很不幸,SO搜索引擎不适用于'===',因为这个问题每月会被询问一次。 – 2010-11-02 17:31:42

+0

提供最好的答案之一作为评论xD – 2010-11-02 17:31:48

回答

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 ==虚假

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

然而,这会工作这将无法正常工作:

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

这个答案是正确的,但我要添加一个例子。 'strpos(“abcde”,“f”)'返回'false',因为'f'不在字符串'abcde'中。你可能想要测试这个,所以你会使用'if(strpos(“abcde”,“f”)=== false)''。如果你简单地做了if(!(strpos(“abcde”,“f”)))',那么如果strpos实际返回'0',你将会遇到麻烦。为什么?因为PHP是松散类型的,而'0'0和'false'在不比较类型时是等价的。 – Brad 2010-11-02 17:38:04

13

他们身份等价运营商。

1 == 1 
1 == "1" 
1 === 1 
1 !== "1" 
true === true 
true !== "true" 
true == "true" 

所有这些等同于真。 另请参见@mbeckish提供的this link

+2

虽然我不会称之为同一性,因为具有不同身份的两个对象仍然可以具有相同的值和相同的类型(并且与'==='相同)。在PHP中只有*身份*。 – poke 2010-11-02 17:35:50

+0

这是等价运算符。它声称两个“参数”(左侧和右侧)都是相同的并且是相同的类型(如果是对象,则是同一类)。 – ircmaxell 2010-11-02 17:44:34

0

double = sign是一个比较,并测试左侧的变量/表达式/常量是否与右侧的变量/表达式/常量具有相同的值。

三重=符号是比较两个变量/表达式/常量是否相等AND具有相同类型 - 即两个都是字符串或两者都是整数。

同样的概念也适用于!==

0

如果两个类型和给定值的价值是相等的,他们才会返回true。 实施例: 1 === 1为真 “1” ===图1是假 1 === “1” 为假 “1” === “1” 为真

其中与==所有以上都是真的

0

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

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

上述代码的工作原理是因为它们具有相同的值。

但是,如果您使用三个等号===它将检查值和数据类型。

因此

if('1' === 1) { /* this will not work */ } 

这是因为'1'string1integernumber

数据类型,但是你可以做这样的事情 - 我认为:d

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

因为我们正在更改数据类型'1'integer