Сохранение объекта типа JForm в оперативной памяти |
В отношении метода // сформировать хеш-значение для электронной подписи У этого фрагмента кода очень простое назначение: форму необходимо сохранить на тот случай, если она понадобится снова в данном цикле запроса. Ведь извлечь форму из оперативной памяти намного быстрее, чем воссоздавать ее из 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.
Понравился материал? Пригодилась информация? Плюсани в социалки!
|
Похожие новости | |
|