@alexey_novorisov_89

Как сделать автоподключение базы данных?

Есть самописная реализация MVC (только учусь), в моделях в конструктор передаю реализацию интерфейса, а не конкретный класс, соответственно, у меня возникает вопрос, как правильно сделать файл конфига с подключением к БД?
Я сделал файл config.php с константами, одна из которых содержит в себе дефолтное подключение к базе данных (попросту содержит в себе единственный класс для работы с БД - Mysql). Но PHP не позволяет содержать в константах объекты. Как лучше всего сделать подобный файл? Или может есть другие решения?
Глобальные переменные не рассматриваю равно как и не хотелось бы в каждый файл подключать конфиг который бы возвращал массив. Других решений не придумал/не нашел.
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 1
@rPman
В вопросе сказано 'автоподключение', это значит в коде нет желания писать где то connect или аналогичную ему строку иннициализации.

Если хранить объект подключения в нестатичных полях класса, то код создания экземпляра объекта и будет этой строкой подключения.

И вот тут возникает вопрос о месте хранения настроек. Если для всего проекта предполагается одна база данных с одним одномоментным подключением, то значит настройки должны храниться глобально (в подавляющем большинстве случаев это отдельный подключаемый файл config.php с инициализацией констант в define) либо в конфигурационном файле, десериализаторов которых пруд пруди, используй хоть .ini (parse_ini_file) хоть .json хоть что угодно.

Я пользовался разок определением констант в виде статичных мемберов класса, подключаемых прямо внутри определения класса с помощью include (синтаксически это красивее define и не требует городить громоздкие уникальные имена)

Так же возможна ситуация, когда вообще нет глобального объекта для работы с базой данных, точнее когда этот объект никто не удерживает кроме 'его самого', а доступ к нему организован через функцию, например:
function db()
{
  static $db=false;
  // до появления static у функций можно было хранить и запрашивать объект у самого класса статичным методом
  if(!$db) $db=new Database();
  return $db;
}

....

db()->query(...)
в этом случае подключение к базе будет сделано в момент первого доступа к ней, что иногда даже полезно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы