Сериализация в PHP

Мария February 22, 2010
1505
7
0
0

Всем привет, это снова я. После сравнительного успеха моего предыдущего поста, решилась на новый: про сериализацию. Идея сериализации состоит в том, что переменную (будь то массив, объект или...

Всем привет, это снова я. После сравнительного успеха моего предыдущего поста, решилась на новый: про сериализацию.

Идея сериализации состоит в том, что переменную (будь то массив, объект или, например, число) можно перевести в специально форматированный текст. Этот текст можно записать в базу данных, передать по сети или как-то иначе сохранить и, в последствие, "расшифровав", получить идентичное начальному значение.

В PHP этим занимаются функции serialize() и unserialize(). Использование тривиально:

$a = array('name'=>'Marion','surname'=>'Silver');
$data = serialize($a);
// Записываем / передаем
$a = unserialize($data);
echo $a['name']; // Marion

class MyClass {
private $name;
private $alreadyGreeted = FALSE;


public function __construct($name) {
$this->name = $name;
}

public function hello() {
if ($this->alreadyGreeted) {
echo "Снова привет\n";
}
else {
echo "Привет, меня зовут {$this->name}\n";
$this->alreadyGreeted = TRUE;
}
}


public function __sleep() {
echo "Спать!\n";
return array('name','alreadyGreeted');
}


public function __wakeup() {
echo "Проснись и сияй\n";
}
}

$obj = new MyClass('Маша');
$data = serialize($obj); // Спать!
$obj = unserialize($data); // Проснись и сияй
$obj->hello(); // Привет, меня зовут Маша
$data = serialize($obj); // Спать!
$obj = unserialize($data); // Проснись и сияй
$obj->hello(); // Снова привет

С сериализацией связано 2 метода: __sleep() и __wakeup(). __sleep() должен вернуть массив с именами переменных, которые надо записать во время сериализации, __wakeup() дает возможность "настроить" объект после того как он был "разбужен" перед использованием.

Спрашивайте, комментируйте! :)

p.s. Редактор меня достал, не предназначен для кода :(

Оцените пост

0

Комментарии

0
Хорошо написано. Я бы добавил сериализацию в XML для осуществления межпрограммного взаимодействия.
0
Верно! Тогда не только XML, но и популярный нынче JSON - тянет на самостоятельный пост :)
0
Этот пост надо в раздел "Я знаю php")
0
Я не волшебница, я только учусь :)
0
Поддерживаю =)
Показать комментарии