Комментарии

Сохранение объекта типа JForm в оперативной памяти
( 0 Голосов )

В отношении метода loadForm () остается лишь заметить, что перед выполнением блока try необходимо убедиться, сохранена ли форма в оперативной памяти. Такая проверка производится в следующем фрагменте кода:

// сформировать хеш-значение для  электронной подписи 
$hash = md5($source.serialize($options));
// проверить, можно ли воспользоваться загруженной ранее формой
if (isset($this->_forms[$hash]) && !$clear) {$this->_forms[$hash];}

У этого фрагмента кода очень простое назначение: форму необходимо сохранить на тот случай, если она понадобится снова в данном цикле запроса. Ведь извлечь форму из оперативной памяти намного быстрее, чем воссоздавать ее из XML-файла. А поскольку в одном цикле запроса могут оказаться активными несколько объектов типа JForm, то для данной конкретной формы необходимо сформировать однозначный идентификатор. С этой целью вызываются функции md5 () и serialize () языка РНР. Так, функция serialize () преобразует объект в символьную строку, сохраняя всю информацию, необходимую для обратного преобразования в исходный объект. А функция md5 () принимает любую символьную строку в качестве аргумента и формирует 32-символьную строку, однозначно определяющую исходную строку. Символьная строка, возвращаемая функцией md5 (), служит в качестве ключа к ассоциативному массиву для сохранения в нем сериализованного (последовательно упорядоченного) объекта. Такой алгоритм дает следующие преимущества. Один и тот же экземпляр объекта типа JForm будет всегда давать то же самое хеш-значение.

Значение будет всегда однозначно определять данный объект типа JForm, а следовательно, в оперативной памяти можно хранить несколько объектов данного типа, используя для этого отдельный массив.

Хеш-значение пригодно для хранения в ассоциативном массиве.

В данном примере переменная $ opt ions содержит ассоциативный массив с двумя элементами: control со значением " jform" и load_data со значением 1, а переменная $source — значение "weblink". Вызов функции serialize ($options) приводит к следующему результату:

а:2:{s:7:"control";s:5:"jform";s:9:"load_data";b:l;}

а вызов функции $source. serialize ($options) — к такому:

weblinka:2:{s:7:"control";s:5:"j form";s:9:"load_data";b:1;}

И наконец, в результате вызова функции md5 ($source. serialize ($options)) переменной $hash присваивается следующее хеш-значение:

37ceb359374f97c561de59903862618e

Получив хеш-значение в переменной $hash, можно далее проверить, сохранена ли данная конкретная форма в поле $this->_forms. Если она сохранена, то это означает, что объект именно этой формы уже находится в оперативной памяти, а следовательно, данную форму уже не придется загружать из XML-файла. И как только объект данной формы будет получен, остальная часть метода loadForm() пропускается и происходит возврат из него.

Когда достоверная форма уже имеется, после блока try/catch следует приведенная ниже строка кода с комментарием.

// сохранить форму на будущее $this->_forms[$hash] = $form;

В этой строке кода объект нужной формы сохраняется в массиве, оставаясь там до тех пор, пока он не понадобится снова. Рассмотренный здесь способ сохранения объектов в ассоциативных массивах с помощью хеш-значения в качестве ключа к массиву нередко применяется для экономии времени, затрачиваемого на обработку данных в различных местах Joomla.


Понравился материал? Пригодилась информация? Плюсани в социалки!


Теги:
 
Похожие новости