La differenza negli esempi dipende dalla precedenza: && e || hanno precedenza maggiore di =, mentre and e or hanno precedenza minore. Non cambia la tabella logica, cambia il raggruppamento dell’espressione.
$a = false || true; // $a è true
$b = false or true; // equivale a ($b = false) or true: $b resta false
$c = (false or true); // $c è truePer assegnare un risultato booleano, preferisci && e || oppure parentesi esplicite. Tutti questi operatori usano la valutazione a corto circuito: il secondo operando viene eseguito solo se necessario.
Esempi completi
Un semplice esempio che mostra la differenza tra && - and e || - or<?php /** * AND */ echo '&&' . "\n"; $bool = true && false; echo 'true && false: ' . (int)$bool . "\n";// false $bool = false && true; echo 'false && true: ' . (int)$bool . "\n"; // false echo 'AND' . "\n"; $bool = true and false; echo 'true and false: ' . (int)$bool . "\n"; // true $bool = false and true; echo 'false and true: ' . (int)$bool . "\n"; // false /** * OR */ echo '||' . "\n"; $bool = true || false; echo 'true || false: ' . (int)$bool . "\n"; // true $bool = false || true; echo 'false || true: ' . (int)$bool . "\n"; // true echo 'OR' . "\n"; $bool = true or false; echo 'true or false: ' . (int)$bool . "\n"; // true $bool = false or true; echo 'false or true: ' . (int)$bool . "\n"; // falseDi seguito l'output:
&& true && false: 0 false && true: 0 AND true and false: 1 false and true: 0 || true || false: 1 false || true: 1 OR true or false: 1 false or true: 0Reference: qui
Come provare
Salva l’esempio completo in booleani.php ed esegui php booleani.php. Confronta l’output con quello riportato. In particolare false || true assegna 1, mentre false or true lascia 0 nella variabile perché l’assegnazione è già avvenuta. Per rendere esplicito l’intento, prova anche $bool = (false or true);: in quel caso ottieni 1.