#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'];
}
Причина, по которой я рекомендую это, заключается в том, что это переносит ответственность за загрузку конфигураций за пределы класса (который, я полагаю, ваш класс не имеет ничего общего с загрузкой конфигурации сам по себе) и создает более логичный интерфейс. Кроме того, он отделяет конфигурационные файлы непосредственно от вашего класса.