Плюсы / минусы того, когда разбирать INI-файл

#php #optimization #configuration #initialization #ini

#php #оптимизация #конфигурация #инициализация #ini

Вопрос:

Я хотел знать, нормально ли разбирать INI-файл в конструкторе или есть более оптимальный процесс?

Итак, мой текущий процесс заключается в передаче INI-файла при создании экземпляра класса следующим образом:

 include_once('/path/to/class.php');
$bar = new Foo('/path/to/class.ini');
$bar->runProcess();
  

Итак, в моем конструкторе класса у меня есть что-то вроде этого:

 public function __construct($ini_file) {
    $ini = parse_ini_file($ini_file, true);

    // Then set all the variables I need here from the INI
    $this->variable_setting = $ini['ini_section']['ini_variable'];   
}
  

Ответ №1:

Делать это в конструкторе нормально. Однако, если вам это не всегда нужно, вы можете захотеть сделать это отдельным методом, который вызывается только тогда, когда ini-файл действительно необходим.

Комментарии:

1. Мне нравится завершать процесс, если что-то настроено неправильно.

2. В этом случае генерируется исключение

Ответ №2:

Я бы предпочел создать конкретный интерфейс с параметрами конфигурации, которые вы хотите использовать. Т.е.,

 public function __construct($someConfigValue, $anotherConfigValue)
{
   $this->_configValue1 = $someConfigValue;
   $this->_configValue2 = $anotherConfigValue;
}
  

Однако, если вы ожидаете много разных конфигураций, то вам, вероятно, лучше передать вместо этого массив.

 public function __construct($config)
{
   $this->_configValue1 = $config['someConfigValue'];
   $this->_configValue2 = $config['someConfigValue'];
}
  

Причина, по которой я рекомендую это, заключается в том, что это переносит ответственность за загрузку конфигураций за пределы класса (который, я полагаю, ваш класс не имеет ничего общего с загрузкой конфигурации сам по себе) и создает более логичный интерфейс. Кроме того, он отделяет конфигурационные файлы непосредственно от вашего класса.