By the way i surprised about this What will this code output and why?
$x = true and false;
var_dump($x);
By the way i surprised about this What will this code output and why?
$x = true and false;
var_dump($x);
Surprisingly to many, the above code will output bool(true) seeming to imply that the and
operator is behaving instead as an or
.
The issue here is that the = operator takes precedence over the and operator in order of operations, so the statement $x = true
and false ends up being functionally equivalent to:
$x = true;
// sets $x equal to true
true and false; // results in false, but has no affect on anything
This is, incidentally, a great example of why using parentheses to clearly specify your intent is generally a good practice, in any language. For example, if the above statement $x = true
and false were replaced with $x = (true and false)
, then $x
would be set to false as expected.