==和!=不考虑要比较的变量的数据类型。所以这些都将返回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