Главная Новости

Сериализация объектов в PHP


Опубликовано: 06.09.2018

видео Сериализация объектов в PHP

php ооп: Жизненый цикл объектов, урок 5!

Одной из особенностей PHP является то, что продолжительность жизни создаваемых с его помощью объектов, как правило, очень невелика. Это связано с тем, что все переменные и объекты уничтожаются после завершения скрипта. Протокол HTTP не является сессионным, то есть каждое обращение к серверу воспринимается как обращение нового клиента, а история его предыдущих обращений не сохраняется. Разработчик приложения должен сам реализовывать сохранения состояния приложения для каждого из клиентов, прибегая к сессиям и кукам. В таких условиях приобретает большое значение возможность передачи объекта между несколькими сеансами клиента или даже между отдельными страницами web-приложения.



Для сохранения объекта в формате, который бы позволял в дальнейшем его восстановить, часто прибегают к сериализации , переводу объекта в строку при помощи функции "serialize()". Такая строка может быть сохранена в файл или базу данных, а затем из неё можно получить сохранённый объект при помощи обратной функции "unserialize()". Сериализации могут подвергаться не только объекты, но и массивы в том числе многомерные.


Сериализация на обекти – ООП Урок 24

Для демонстрации примеров работы с функциями "serialize()" и "unserialize()" создадим класс " ClassSerialize", содержащий единственный открытый член "$serialize", инициализация которого будет осуществляться в конструкторе класса.

Пример который сериализует объект "$obj_serialize" класса "ClassSerialize" в строку, а строку сохранит в файл "serialize.sl":

class ClassSerialize { public $serialize; public function __construct($serialize) { $this->serialize = $serialize; } } # Создаём объект; $obj_serialize = new ClassSerialize(1000); # Сериализуем объект; $_result = serialize($obj_serialize); # Сохраняем объект в файл; $_new_file = fopen('serialize.sl', "w"); if(!$_new_file) exit('Ошибка работы с файлом'); fwrite($_new_file, $_result); fclose($_new_file); Результатом работы скрипта будет файл "serialize.sl", содержащий следующую строку:

O:14:"ClassSerialize":1:{s:9:"serialize";i:1000;}

Данная строка предназначена для функции "unserialize()" и позволяет восстановить объект в другом файле.

Восстановление объекта из строки:

class ClassSerialize { public $serialize; public function __construct($serialize) { $this->serialize = $serialize; } } # Извлекаем сериализованный объект из файла; $_file = fopen('serialize.sl', "r"); if(!$_file) exit('Ошибка работы с файлом'); $_result = fread($_file, filesize('serialize.sl')); fclose($_file); # Восстанавливаем объект; $_unserialize = unserialize($_result); # Выводим дамп объекта; echo '<pre>'; print_r($_unserialize); echo '</pre>';

Результат:

ClassSerialize Object ( [serialize] => 1000 )

Важно, чтобы при восстановлении объекта скрипт имел доступ к классу "ClassSerialize", иначе восстановление объекта выполниться не полностью. По сути, будет создан объект-контейнер, в котором имеются члены класса "ClassSerialize", однако отсутствуют какие бы то ни было методы.

Объект-контейнер создаться в том случае если класс "ClassSerialize" не будет найден:

"__PHP_Incomplete_Class Object([__PHP_Incomplete_Class_Name] => ClassSerialize[serialize] => 1000)"

В следующей статье поговорим о сохранении сериализованного объекта в сессиях .

tillad

3326

rss