@flammerman
Web Developer / И фронт и сервер

Как сделать доступную во всех подключаемых классах конфигурацию приложения в виде массива?

В общем есть массив конфигурации приложения:
$config = [
        'logotext' => 'USER Application Name', 
        'base_dir' => BASE_DIR, 
        'db' => [
            'file' => BASE_DIR . 'db/database.sqlite',
        ],
        'router'=> [
            'path'=>true,
            'action'=>'index',
            'rules'=> [],
        ],
    ];
// Старт приложения:
$app = new Application($config);
echo $app->run();

Абстрактный класс приложения - System:
abstract class System {
public $config;
public function __construct($config=null) 
    {
        $this->_setConfig($config); // Преобразую Массив конфига в обьекты, чисто для красоты ($this->config->paramName->subParamName)
        $this->init();
    }

private function _setConfig($config) 
    {
        $this->config = $this->_toObject($config);
    }
public function router($class='Router') 
    {
        return new $class($this->config->router);    
    }

}

Основной класс приложения Application наследуемый от абстрактного класса System:
class Application extends System {
function __construct($config=null) 
    {
        parent::__construct($config);            
    }

}


Конечно я вообще не знаю точно на сколько это все правильно реализовано, не ругайте сильно. Проблема в том что каждый раз приходится передавать конфигурацию ($this->config) при создании экземпляров вспомогательных классов внутри основного класса Application или в System (через конструктор), которые тоже хотят пользоваться общим конфигурационным массивом. Например, сделаю новый класс Data, который, допустим, будет по типу модели, этому классу понадобится информация каким образом получить доступ к БД
class Data {
function getConfigDSNString()
{
return; // Вернуть какую либо строку из конфигурации в качестве примера передачи конфиг массива в класс
}
}

Как вариант конечно можно использовать отдельный для этого класс Config, в котором объявить какой-либо статический метод get() и вызывать что-то вроде Config::get('dbDSN');

Какие есть еще варианты что-бы не привязывать классы к передаче конфигурации через конструкторы или через доп статик класс Конфиг?
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

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