Я думаю, це питання смаку, хоча (помилково) їх змішування може спричинити небажану поведінку:
true && false || false; // returns false
true and false || false; // returns true
Отже, використовуючи && та || безпечніше, оскільки вони мають найвищий пріоритет. Що стосується читабельності, я б сказав, що ці оператори є досить універсальними.
ОНОВЛЕННЯ : Щодо коментарів, які говорять про те, що обидві операції повертаються помилково ... ну, насправді код вище нічого не повертає, пробачте за неясність. Для уточнення: поведінка у другому випадку залежить від того, як використовується результат операції. Слідкуйте за тим, як тут грають перевагу операторів:
var_dump(true and false || false); // bool(false)
$a = true and false || false; var_dump($a); // bool(true)
Причина тому $a === true
, що оператор присвоєння має перевагу перед будь-яким логічним оператором, як уже дуже добре пояснено в інших відповідях.
~
це біт-розумний оператор НЕ і не логічний. ;-)