Как правильно задавать конфигурационные переменные для приложения на PHP?

Скажем, я пишу какое-то приложение на php (небольшой движок сайта на MVC). В программе часто используются какие-то постоянные данные, которые используются в различных местах, модулях, функциях, классах и т.д. Как правильно инициализировать эти данные? Правильно ли я понимаю, что принято в таком случае создавать какой-то конфигурационный файл, инклудить его в в самом начале и в нем уже определять все нужные значения? Это должны быть глобальные переменные? Или статические? Или же лучше и вовсе создать отдельный класс, методы которого возвращали бы эти значения?
Или правильнее использовать константы, типа:
define('LIB_PATCH', '/lib');

Опытные программисты, дайте пожалуйста совет или наводку как это правильно организуется!
  • Вопрос задан
  • 2643 просмотра
Решения вопроса 1
По своему опыту:
----
"универсальные" настройки пишу так:
define('DIRSEP', DIRECTORY_SEPARATOR);

"уникальные" настройки (те что уникальны для конкретного сайта на одном движке) храню в JSON с последующим преобразованием в массив.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
не используйте константы для конфигурации, лучше уж реализовать какой-то менеджер конфигураций, который можно заинджектить в любой компонент приложения и работать с ним. Контанты это просто, но не гибко.

Более тру вэй, использовать штуки типа dependency injection container, например рекомендую PHP-DI. Скажем у вас по хорошему все должно быть разбито на компоненты, и вы просто указываете фабрики этих объектов, передавая все настройки в конструктор или в сеттеры. В этом случае компоненты будут знать только то, что нужно только им, а у вас будет одно центральное место для задания конфигурации всех компонентов.

Ну и меньше рутины с созданием инстансов компонентов, вы просто их запрашиваете в других компонентах. а контейнер вам его инициализирует и отдаст, или отдаст уже инициализированный ранее компонент.
Ответ написан
Используйте глобальные переменные, если доступ к ним нужен из любой части проекта. Для отдельных модулей используйте namespace.
Ответ написан
Комментировать
GM2mars
@GM2mars
Лично я в своем проекте создал отдельный файл config.php где лежит один объект конфигурации, и в начале index.php просто его инклудю. А в каких частях нужно, вывожу конфигурацию.
Может это конечно звучит не совсем "профессионально", но я не любитель "правильного геморроя" и не усложняю простых вещей.
Ответ написан
Ваш ответ на вопрос

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

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