2010-09-04 45 views
39

我一直這樣做if($foo!==$bar)但我意識到if($foo!=$bar)也是正確的。雙=仍然有效,一直爲我工作,但每當我搜索PHP運營商,我發現沒有雙=信息,所以我認爲我一直做這個錯誤,但它的作品無論如何。那麼我應該爲了它而將我所有的!==更改爲!=php不等於!=和!==

+1

的可能的複製(HTTP [如何做PHP等於(==雙等於)和身份證(===三重等於)比較操作有什麼區別?]://計算器。 COM /問題/ 80646 /怎麼辦最PHP平等 - 雙等於-和身份的三重等於-COMP) – nawfal 2015-11-15 11:20:13

回答

92

==!=不考慮您比較的變量的數據類型。因此,這些都會返回true:

'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 
0

您可以在這裏找到的信息:http://www.php.net/manual/en/language.operators.comparison.php

,因爲它沒有添加到PHP4它是稀缺的。你有什麼是好的,如果你知道可能存在類型差異,那麼它是一個更好的比較,因爲它是測試值類型的比較,而不僅僅是價值。

18

!==應該匹配值和數據類型

!=只匹配值忽略的數據類型

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

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