The importance of using === instead of == in php! [duplicate]
Of course, just one example: array_search()
Warning
This function may return Boolean
FALSE
, but may also return a non-Boolean value which evaluates toFALSE
, such as0
or""
. Please read the section on Booleans for more information. Use the===
operator for testing the return value of this function.
Basically if you use any function that returns a value on success but FALSE
on failure, you should check the result with ===
to be sure (otherwise why would there be a big red warning box? ;))
Further examples: next()
, current()
or as also mentioned string functions as strpos()
, stripos()
, etc.
Even substr()
although it is not mentioned explicitly:
Returns the extracted part of string or FALSE on failure.
But what if the extracted part is"0"
? It also evaluates to FALSE
, but it is not an error.
Always choose ===
over ==
except you're absolutely sure you need ==
, because ==
is not transitive. And that in turn is important for your reasoning about your code.
Consider the following code snippet
if ( $a == $b && $b == $c ) { // [1] assert: $a == $c}
Anybody would infer from the if condition that the assertion $a == $c
is true because we are so used to the equality relation being transitive. But that doesn't hold for ==
, counter example:
$a = "0";$b = 0;$c = null;
Now think about how often we make (at times unconsciously) that assumption while writing code. That could lead to serious bugs.
In strpos()
you have 0 when string is found and false when is misissing. You must use ===
to check difference.