Где лучше хранить конфиги или почему define это плохо?

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Dromok
Сообщения: 35
Зарегистрирован: 2015.06.22, 20:34

Где лучше хранить конфиги или почему define это плохо?

Сообщение Dromok »

Здравствуйте!
Пишу консольное приложение на PHP 7, будет работать как демон. Решил yii там не использовать, так как он там излишен.

Так вот, всю архитектуру продумываю с нуля (до этого всегда писал на йии и других фреймах, поэтому писать полностью с нуля оказалось не просто). И задался вопросом где хранить конфиг.

Хотел создать отдельный класс Config с get, как многие и рекомендуют. Но тут узнал, что в пхп7 можно в define вставить массив. Мне это показалось очень удобным, ведь теперь можно сделать так:

Код: Выделить всё

define(
'CONFIG',
['db' => ['host'=>'localhost', 'user'=>'root', 'password'=>'']]
);

echo CONFIG['db']['host'];
Естественно там хранить не только данные для подключения к бд, а вообще всё что может понадобиться в конфиге.
Вставить эту константу во входном скрипте и вуаля она доступна везде в приложении, что очень удобно. Такой типа аналог Yii::$app->params доступный везде, только без лишнего кода.

Так вот вычитал, что хранить конфиг в константах это типа плохой тон и всё такое. Ну ладно я понимаю, когда констант кучу наплодили, под каждый параметр отдельная константа, но тут то по сути только одна константа-массив и всё. И собственно вопрос, чем плохо моё решение и плохо ли вообще?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Где лучше хранить конфиги или почему define это плохо?

Сообщение ElisDN »

А если понадобится работать с двумя базами, то что будете делать?
Dromok
Сообщения: 35
Зарегистрирован: 2015.06.22, 20:34

Re: Где лучше хранить конфиги или почему define это плохо?

Сообщение Dromok »

ElisDN писал(а): 2017.01.27, 04:53 А если понадобится работать с двумя базами, то что будете делать?
У меня как раз потребуется обращаться к нескольким базам данных. В конфиге будут прописаны данные для доступа ко всем базам данных.

Но не совсем понял, как это относится к конфигу. Ведь даже если я не так бы обращался к конфигу как предложил в первом посте, то всё равно бы потребовалось где-то в конфиге указывать несколько баз данных.

Спасибо за ответ, но хотелось бы всё-таки понять чем плохо использовать константы для той цели, что предложил я и плохо ли вообще.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Где лучше хранить конфиги или почему define это плохо?

Сообщение ElisDN »

Посмотрите https://www.youtube.com/watch?v=DcNtg4_i-2w про Pimple и храните все настройки там.

В свежей версии нужно указывать напрямую анонимки без $container->share.
Dromok
Сообщения: 35
Зарегистрирован: 2015.06.22, 20:34

Re: Где лучше хранить конфиги или почему define это плохо?

Сообщение Dromok »

Спасибо. Я честно пока не могу понять, зачем усложнять там, где можно сделать всё очень просто? Но сейчас стараюсь читать много литературы по программированию и возможно когда-нибудь я отвечу на свой вопрос. Толи это мода такая везде применять подход symfony, толи это действительно лучшее решение, пока я на это ответить не могу, но на данном этапе своего развития считаю, что излишнее усложнение это всегда плохо.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Где лучше хранить конфиги или почему define это плохо?

Сообщение samdark »

Ничем не плохо. Храните как вам удобней. Главное, чтобы в репозиторий это не попадало и наружу не торчало.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Где лучше хранить конфиги или почему define это плохо?

Сообщение ElisDN »

Dromok писал(а): 2017.01.27, 23:11 но на данном этапе своего развития считаю, что излишнее усложнение это всегда плохо.
Тогда на данном этапе оставляйте на константах и синглтонах.
Аватара пользователя
Cacatuidae
Сообщения: 65
Зарегистрирован: 2017.01.08, 17:39

Re: Где лучше хранить конфиги или почему define это плохо?

Сообщение Cacatuidae »

Я бы на вашем месте использовал конфиг файл + синглтон, который при инициалиализации цепляет файл и читает его.
В приложении использовал такой вызов Config::get()->db, Config::get()->site_name и так далее через магию __set().
Если без магии, то так Config::get('db').
Но первое предпочительнее, т.к. можно будет задать phpdoc и видеть, что например Config::get()->site_name - это string, а Config::get()->db - массив.
Будет проще работать с IDE
Ответить