В 2026 году разработка на PHP требует отказа от ряда устаревших и неэффективных подходов, которые продолжают встречаться даже в новых проектах. Современные версии языка (PHP 8.3+), а также инструменты экосистемы (Composer, PHPStan, Laravel) предоставляют надёжные средства для повышения качества, безопасности и сопровождаемости кода. В данном обзоре рассмотрены основные антипаттерны, их влияние на кодовую базу и рекомендуемые альтернативы.

Подавление ошибок с помощью оператора @

Использование оператора подавления ошибок (например, @file_get_contents) приводит к сокрытию критических сбоев, что затрудняет диагностику и может привести к непредсказуемому поведению приложения. Вместо этого рекомендуется явно обрабатывать возможные ошибки и использовать современные HTTP-клиенты, такие как Guzzle, которые по умолчанию генерируют исключения при сбоях.
Пример:

Использование небезопасных SQL-запросов

Внедрение пользовательских данных напрямую в SQL-запросы без использования подготовленных выражений создаёт уязвимости для SQL-инъекций. Для предотвращения подобных атак следует применять PDO с подготовленными выражениями или использовать ORM (например, Eloquent).
Пример:

Размещение бизнес-логики в контроллерах

Контроллеры должны выполнять только функции приёма запроса и возврата ответа. Вся бизнес-логика должна быть вынесена в отдельные сервисы, что повышает тестируемость и сопровождаемость кода.
Пример:

Игнорирование типизации

Отсутствие строгой типизации затрудняет сопровождение и увеличивает вероятность ошибок. В PHP 8.x доступны скалярные типы, объединения типов, перечисления и свойства только для чтения, что позволяет сделать код самодокументируемым и более надёжным.
Пример:

Ручное управление зависимостями

Использование ручного подключения библиотек (например, через require_once) устарело. Современный стандарт - Composer, который обеспечивает автоматическое подключение, контроль версий и разрешение зависимостей.
Пример:

Отказ от статического анализа кода

Статический анализ с помощью инструментов PHPStan или Psalm позволяет выявлять ошибки на этапе разработки, предотвращая их попадание в продакшн.
Пример:

Использование die() и exit() для обработки ошибок

Операторы die() и exit() прерывают выполнение скрипта без логирования и обработки, что недопустимо в современных приложениях. Следует использовать исключения.
Пример:

Откладывание или отсутствие тестов

Тестирование должно быть неотъемлемой частью разработки. Автоматизированные тесты позволяют безопасно рефакторить код и предотвращают регрессии. Написание теста новой фичи занимает 5 минут, но спасает от часов дебага.
Пример:

Заключение

Отказ от устаревших практик и внедрение современных подходов - залог создания надёжных, безопасных и легко поддерживаемых PHP-приложений. Рекомендуется последовательно внедрять перечисленные рекомендации в существующие проекты для повышения их качества.