'AND' vs '&&' as operator
If you use AND
and OR
, you'll eventually get tripped up by something like this:
$this_one = true;$that = false;$truthiness = $this_one and $that;
Want to guess what $truthiness
equals?
If you said false
... bzzzt, sorry, wrong!
$truthiness
above has the value true
. Why? =
has a higher precedence than and
. The addition of parentheses to show the implicit order makes this clearer:
($truthiness = $this_one) and $that
If you used &&
instead of and
in the first code example, it would work as expected and be false
.
As discussed in the comments below, this also works to get the correct value, as parentheses have higher precedence than =
:
$truthiness = ($this_one and $that)
Depending on how it's being used, it might be necessary and even handy.http://php.net/manual/en/language.operators.logical.php
// "||" has a greater precedence than "or"// The result of the expression (false || true) is assigned to $e// Acts like: ($e = (false || true))$e = false || true;// The constant false is assigned to $f and then true is ignored// Acts like: (($f = false) or true)$f = false or true;
But in most cases it seems like more of a developer taste thing, like every occurrence of this that I've seen in CodeIgniter framework like @Sarfraz has mentioned.
For safety, I always parenthesise my comparisons and space them out. That way, I don't have to rely on operator precedence:
if( ((i==0) && (b==2)) || ((c==3) && !(f==5)) )