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