5.1. Avoiding == Versus = Confusion
Problem
You don’t want to accidentally assign values when comparing a variable and a constant.
Solution
Use:
if (12 == $dwarves) { ... }instead of:
if ($dwarves == 12) { ... }Putting the constant on the left triggers a parse error with the assignment operator. In other words, PHP complains when you write:
if (12 = $dwarves) { ... }but:
if ($dwarves = 12) { ... }silently executes, assigning 12 to the variable
$dwarves, and then executing the code inside the
block. ($dwarves = 12 evaluates to
12, which is true.)
Discussion
Putting a constant on
the left side of a comparison coerces the comparison to the type of
the constant. This causes problems when you are comparing an integer
with a variable that could be an integer or a string. 0 == $dwarves is true when
$dwarves is 0, but
it’s also true when $dwarves is
sleepy. Since an integer (0) is
on the left side of the comparison, PHP converts
what’s on the right (the string
sleepy) to an integer (0)
before comparing. To avoid this, use the
identity operator, 0 === $dwarves, instead.
See Also
Documentation for = at
http://www.php.net/language.operators.assignment.php
and for == and === at
http://www.php.net/manual/language.operators.comparison.php.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access