PHP: Почему использовать `and` и `or` вместо || и && — плохо

Последнее обновление статьи — 15 декабря 2018

Микрозаметка на тему из области «вопросы на собеседовании».

Как-то я в PHP начал писать and и or вместо && и ||, потому что мне так нравится делать на питоне, и, как я думал, это улучшает читабельность кода. Однажды я столкнулся с неожиданным эффектом:

Как оказалось, логические операторы and и && (or и ||) не являются просто синонимами, а имеют разный приоритет выполнения: все «символьные» (&&, ||, !) операторы выполняются до оператора присваивания =, а and, or, xorпосле.

Подробно об этом написано в официальной документации.

Что это значит на практике:

Вывод такой: если пользоваться читабельными вариантами логических операторов в условиях, всё будет работать, как ожидалось. В случаях, где результат выражения должен быть присвоен или возвращён, стоит следить внимательней за порядком выполнения выражений — именно поэтому линтеры/статические анализаторы выдают предупреждение на подобных участках кода, и рекомендуют переписать его в стандартном виде.