So there\'s this page on the php site which shows the result of comparing different values:
http://php.net/manual/en/types.comparisons.php
This is a helpful refe
For strict ===
comparision, the logic is easy: each value entity is equal only to itself, so TRUE === TRUE
, "1" === "1"
, but "1" !== 1
etc.
When it comes to ==
comparision, unfortunately there is no rule of thumb nor a clear logic. This is probably because the various forms of the operator were implemented by different programmers, without a central design decision. The best I can do is providing you with this graph to print and stick over the monitor:
The key of the grap is: A == B
will be TRUE
if and only if A
and B
are of two types directly connected by a line in the graph above. For instance, array() == NULL
is TRUE
because array()
and NULL
are directly connected, while array() == 0
is FALSE
because there is no line connecting the two.
Lines marked in red are the tricky (non obvious) equalities.
I've omitted that each entity will be equal to itself (e.g. "1" == "1"
etc.) but that should be easy to remember.
As a final note, I'd like to explain why "php" == 0
is TRUE
(non empty, non number string is equal to 0
): because PHP casts "php"
to number before comparision and, since it's not a number, it defaults to 0
and makes the test TRUE
.
Fun fact: there is no partition in this relation! If ever a transitive closure was allowed, you could easily say that True is False and False is True, destroying millennia of philosphy in four easy PHP statements :D