我总是这样做if($foo!==$bar)
,但我意识到if($foo!=$bar)
也是正确的。 Double =
仍然可以工作,并且一直对我有效,但每当我搜索PHP运算符时,我都找不到双=
的信息,所以我认为我总是这样做错了,但无论如何都可行。那么我应该仅为了它而将我的所有!==
更改为!=
吗?
答案 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)
答案 3 :(得分:0)
您可以在此处找到相关信息:http://www.php.net/manual/en/language.operators.comparison.php
它很少,因为它直到PHP4才被添加。你有什么是好的,如果你知道可能存在类型差异,那么这是一个更好的比较,因为它在比较中测试值和类型,而不仅仅是值。