Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
0
22:44, 22 февраля 2010

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

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

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

В 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
376
7