<?php
$x = false or true;
// => true
var_export($x);
// => false
$y = false || true;
// => true
var_export($y);
// => true
Why?
<?php
$x = false or true;
// becomes...
($x = false) or true;
// so you're assigning `false` to `$x` then comparing `$x` to `true`, which evaluates as true.
But
<?php
$x = false || true;
// becomes...
$x = (false || true);
// so you're assigning the result of the expression to `$x`