PHP: PDO
2026-02-26 22:57 Diff

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

Чтобы решить эту проблему, можно скрыть работу с базой за какой-то абстракцией. Один из вариантов такой изоляции называют DAO (Data Access Object).

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

Метод save() в этом классе не только сохраняет данные в базу, но и изменяет переданный объект, устанавливая внутри него идентификатор. Зачем это нужно? Код приложения работает с объектом, а не с базой напрямую. Соответственно, любые изменения в базе должны отражаться на объекте.

Если бы мы не установили идентификатор после сохранения пользователя, то не смогли бы:

  • Формировать ссылки — например, ссылку на редактирование пользователя
  • Сравнивать объекты друг с другом
  • Отличать существующих пользователей от новых, которых мы еще не сохранили в базу данных
  • Обеспечить работу кода так, чтобы полноценная версия save() проверяла наличие идентификатора и выполняла обновление данных, если его нет

Рассмотрим несколько примеров использования DAO: