W
dokumentacji masz w miarę jasny przykład razem z wytłumaczeniem.
// "||" 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;
Zauważ, że gdy umieścisz całe wyrażenia w nawiasach, to otrzymasz już taki sam wynik dla obu wyrażeń.
(Bo w ten sposób poinformowałeś interpreter, że to na pewno są wyrażenia)$a = (false || true);
$b = (false or true);
// bool(true)
// bool(true)
Podsumowując, to co dla nas wydaje się być oczywiste, dla interpretera PHP nie zawsze takie jest.
My
(ludzie) w przypadku instrukcji
$b = false or true widzimy
zapisanie do zmiennej wyniku wyrażenia, natomiast interpreter widzi
przypisanie false do zmiennej.
Aby jeszcze lepiej to sobie zobrazować, wykonaj poniższy skrypt i sprawdź wynik
$a = 'ala ma kota' || true;
$b = 'ala ma kota' or true;
$c = (false || true);
$d = ('ala ma kota' or true);