web-dev-qa-db-ja.com

!=および!==と等しくないphp

私はいつもこれをしましたif($foo!==$bar)が、if($foo!=$bar)も正しいことに気付きました。 Double =は引き続き機能し、常に機能しますが、PHP演算子を検索するたびにdouble =に関する情報が見つからないので、常にこの間違いを犯したと思いますが、とにかく動作します。そのために、すべての!==!=に変更する必要がありますか?

57
lawrence

==および!=は、比較する変数のデータ型を考慮しません。したがって、これらはすべてtrueを返します。

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

===および!==doデータ型を考慮します。つまり、文字列をブール値と比較するとneverが真になります。なぜなら、それらはたとえば異なるタイプであるためです。これらはすべて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
117
BoltClock

!==は値とデータ型と一致する必要があります

!=データ型を無視して値と一致するだけ

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

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

$a !== $bTRUE$a$bと等しくない場合、または同じタイプではない場合

http://php.net/manual/en/language.operators.comparison.php を参照してください

2
user372551

ここで情報を見つけることができます: http://www.php.net/manual/en/language.operators.comparison.php

PHP4まで追加されなかったため、不足しています。あなたが持っているものは大丈夫ですが、型の違いがあるかもしれないことがわかっている場合は、比較で値and型をテストしているので、はるかに優れた比較です、価値だけではありません。

0
Nick Craver