Letter Logical Bug¶
PHP offers two sets of operators for logical operations: the letter operators, and, or, xor, and the symbol operators, &&, ||, no xor in symbol.
While they do the same, those operators have a difference: they do not share the same precedence. In particular, && has higher priority than = while = has higher priority than and. This leads to a difference in execution.
When combining = and &&, the logical operation happens before the assignation. While combining = and and actually ignore the logical operation.
The same problem affect yield, yield from, print, all assignations, including the short assignations, the ternary operator and the null-coalesce.
It is recommended to always use the symbol logical operators, which is closer to human expectations.
<?php
$a = 1 && 3;
$b = 1 and 3;
// equivalent to
($b = 1) and 3;
var_dump($a); // true
var_dump($b); // 1
?>
See also Understanding the Crucial Difference: &&/|| vs. and/or in PHP.
Related : Bitwise Operators, Logical Operators