В моем проекте MVC (PHP 7.1) у меня есть класс Config
и множество файлов конфигурации, каждый из которых выглядит так:
return [
'web' => [
'host' => 'localhost',
//...
],
];
В точке входа приложения я создаю экземпляр класса Config
и загружаю в него все массивы конфигурационных файлов. Затем созданный объект передается в качестве аргумента конструктора во все классы, которые в нем нуждаются:
class AbstractView {
private $config;
public function __construct(Config $config) {
$this->config = $config;
}
private function prepareContext() {
$this->assign('appHost', $this->getConfig()->get('web/host'));
}
}
Поскольку передать объект Config
в моем приложении довольно сложно, я подумал о реализации класса Config
только с константами класса, например:
class Config {
const WEB_PROTOCOL = 'http';
const WEB_HOST = 'localhost';
}
и получить к ним доступ напрямую с помощью
class AbstractView {
private function prepareContext() {
$this->assign('appHost', Config::WEB_HOST);
}
}
Мои вопросы:
- Действительно ли это хорошая альтернатива, учитывая, что я хочу полностью избежать статических состояний в своем приложении?
- Является ли эта альтернатива «статичной» или совсем нет?
- А как насчет тестируемости (у меня пока нет опыта)?
Большое спасибо.