不等于! = 和! = = 在 PHP 中

我总是这样做: if ($foo !== $bar)

但是我意识到 if ($foo != $bar)也是正确的。

Double =仍然可以工作,并且一直对我有效,但是每当我搜索 PHP 操作符时,我都没有找到关于 Double =的信息,所以我假设我一直都做错了,但是它还是可以工作的。我应该改变我所有的 !==!=只是为了它?

251202 次浏览

You can find the info here: http://www.php.net/manual/en/language.operators.comparison.php

It's scarce because it wasn't added until PHP4. What you have is fine though, if you know there may be a type difference then it's a much better comparison, since it's testing value and type in the comparison, not just value.

!== should match the value and data type

!= just match the value ignoring the data type

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


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

$a !== $b TRUE if $a is not equal to $b, or they are not of the same type

Please Refer to http://php.net/manual/en/language.operators.comparison.php

== and != do not take into account the data type of the variables you compare. So these would all return true:

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

=== and !== do take into account the data type. That means comparing a string to a boolean will never be true because they're of different types for example. These will all return false:

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

You should compare data types for functions that return values that could possibly be of ambiguous truthy/falsy value. A well-known example is 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