php不等于!=和!==

时间:2010-09-04 10:16:47

标签: php operators

我总是这样做if($foo!==$bar),但我意识到if($foo!=$bar)也是正确的。 Double =仍然可以工作,并且一直对我有效,但每当我搜索PHP运算符时,我都找不到双=的信息,所以我认为我总是这样做错了,但无论如何都可行。那么我应该仅为了它而将我的所有!==更改为!=吗?

4 个答案:

答案 0 :(得分:115)

==!=未考虑您比较的变量的数据类型。所以这些都会成真:

'0'   == 0
false == 0
NULL  == false

===!== 执行会考虑数据类型。这意味着将字符串与布尔值进行比较将永远成为真,因为它们具有不同的类型,例如。这些都将返回false:

'0'   === 0
false === 0
NULL  === false

您应该比较返回值可能具有模糊真值/假值的函数的数据类型。一个众所周知的例子是strpos()

// This returns 0 because F exists as the first character, but as my above example,
// 0 could mean false, so using == or != would return an incorrect result
var_dump(strpos('Foo', 'F') != false);  // bool(false)
var_dump(strpos('Foo', 'F') !== false); // bool(true), it exists so false isn't returned

答案 1 :(得分:28)

!==应匹配值和数据类型

!=只匹配忽略数据类型的值

$num = '1';
$num2 = 1;

$num == $num2; // returns true    
$num === $num2; // returns false because $num is a string and $num2 is an integer

答案 2 :(得分:2)

如果$a !== $b不等于$a,或者它们的类型不同,则

$b TRUE

请参阅http://php.net/manual/en/language.operators.comparison.php

答案 3 :(得分:0)

您可以在此处找到相关信息:http://www.php.net/manual/en/language.operators.comparison.php

它很少,因为它直到PHP4才被添加。你有什么是好的,如果你知道可能存在类型差异,那么这是一个更好的比较,因为它在比较中测试值类型,而不仅仅是值。