==
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