Полагаю, это дело вкуса, хотя (ошибочно) их перепутывание может вызвать нежелательное поведение:
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
заключается в том, что оператор присваивания имеет приоритет над любым логическим оператором, как уже очень хорошо объяснено в других ответах.