В моя 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);
}
}
Въпросите ми са:
- Това наистина ли е добра алтернатива, имайки предвид, че искам напълно да избегна статични състояния в приложението си?
- Тази алтернатива "статична" ли е или абсолютно не?
- Какво ще кажете за възможността за тестване (все още нямам опит с това)?
Благодаря ти много.