Den1xxx
Постоялец
- Регистрация
- 15 Янв 2014
- Сообщения
- 290
- Реакции
- 168
- Автор темы
- #1
Добрый день.
Хочу поговорить об оптимизации загрузки конфигов.
В движке часто используются конфиги, как правило, в виде сериализованных файлов.
Количество — 50+
Многие загружаются редко, другие каждый раз, а некоторые несколько раз за сессию.
Чтобы не читать файл несколько раз подряд в течение сессии, решил спроектировать загрузку конфигов по шаблону «синглтон».
Пример:
Всё работает. При вызове fn_store_config::getInstance() отдаёт объект, при вызове fn_store_config::get_config() — массив.
Замечательно, обрадовался я. И сразу возник вопрос: как поставить создание кинфигов на поток?
Например, задаём имя файла конфига — расширяем класс и готово.
Попробовал создать класс, расширить — отдает значения родительского класса вместо своих.
Как сделать подобную фабрику правильно?
Хочу поговорить об оптимизации загрузки конфигов.
В движке часто используются конфиги, как правило, в виде сериализованных файлов.
Количество — 50+
Многие загружаются редко, другие каждый раз, а некоторые несколько раз за сессию.
Чтобы не читать файл несколько раз подряд в течение сессии, решил спроектировать загрузку конфигов по шаблону «синглтон».
Пример:
PHP:
class fn_store_config {
public $file_config = 'fnstoreconf.ini';
public $default_config =
array(
'title'=>'Stores',
'store'=>'1',
'prefix'=>'store_',
'perpage'=>100,
);
public $config;
static private $instance;
public static function getInstance() {
if(empty(self::$instance)) {
self::$instance = new self;
}
return self::$instance;
}
public static function get_config() {
if(empty(self::$instance)) {
self::$instance = new self;
}
return self::$instance->config;
}
private function __construct() {
if (is_file(CONFIG_PATH.$this->file_config)) {
$this->config = unserialize(file_get_contents(CONFIG_PATH.$this->file_config));
} else {
$this->config = $this->default_config;
}
}
private function __clone(){}
}
Всё работает. При вызове fn_store_config::getInstance() отдаёт объект, при вызове fn_store_config::get_config() — массив.
Замечательно, обрадовался я. И сразу возник вопрос: как поставить создание кинфигов на поток?
Например, задаём имя файла конфига — расширяем класс и готово.
Попробовал создать класс, расширить — отдает значения родительского класса вместо своих.
Как сделать подобную фабрику правильно?