Несмотря на то что сериализация не очень часто используется в формах (гораздо чаще она применяется в базах данных), она может оказаться весьма полезной для преобразования в последовательный вид переменных РНР. Что же такое сериализация?
Это процесс, посредством которого сложная структура данных, например, массив или объект (который не может быть передан в форму или базу данных непосредственно), преобразуется в строку с помощью некоторого обратимого метода. В то время как для сериализации сложных структур данных обычно создается собственная функция, сериализацию любой переменной РНР можно осуществить с помощью функции serialize (). Ее синтаксис выглядит следующим образом: serialize($input) где $input — сложная структура данных для сериализации. Функция serialize () возвращает строковое представление входных данных, которые выглядит приметно так
(для массива):
$а= arrayC'foo" => "testing", 0 => 10, 1 => "mystring"); echo serialize($a); ?>
Вывод будет иметь следующий вид: а:3: {s:3:"foo";s:7:"testing";i:0;i:10;i:1;s:8:"mystring";}
Обратите внимание, что эта строка не предназначена для передачи с помощью
HTTP-протокола (то есть как скрытый элемент формы) или для сохранения в базе данных. В обоих случаях строка сериализации содержит символы, которые будут расценены как недопустимые. Для решения этой проблемы разработчику доступны несколько методов. Если данные нужно сохранить в базе данных, то подойдет простое использование функции addslashes () (или собственной функции my_addslashes (), рассмотренной ранее). При работе с HTTP-протоколом нужно использовать функцию urlencode () (также рассматривалась ранее).
После сериализации и кодирования (если это необходимо) эта строка может быть передана в базу данных как скрытый элемент HTML-формы или записана в файл для дальнейшего использования. Для восстановления переменной из ее сериализованного представления в РНР предусмотрена функция unserialize (), имеющая похожий синтаксис:
unserialize($input_string [, $callback_function])
где $input_string представляет строку сериализации для восстановления переменной, $callback_function — имя необязательной функции обратного вызова для использования, если unserialize () реконструирует объект, который не был определен (в главе 7 можно найти дополнительную информацию по динамически загружаемым определениям классов). При успешном завершении функция unserialize () возвращает переменную, реконструированную на основе переданных данных, или же false, если РНР не может реконструировать сериализованные данные.
|