Пример: codomaza.com
Вход Регистрация

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

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

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

Для демонстрации примеров работы с функциями "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)"

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


Комментировать

captcha

Вход

Зарегистрируйтесь, если нет учетной записи

Восстановить пароль
Регистрация
Восстановить пароль
Войти в личный кабинет