Волшебные функции __sleep и __wakeup
Функция serialize() проверяет, что ваш класс имеет функцию с названием
__sleep. Если это так, эта функция будет выполняться
перед любой сериализацией. Она может очистить объект
и должна возвращать массив с названиями всех переменных
объекта, которые должны быть сериализованы.
Если метод ничего не возвращает, то сериализуется NULL
и
происходит ошибка уровня E_NOTICE
.
Функцию __sleep предполагается использовать
для приведения объекта в консистентное состояние, очистки
временных переменных и прочих подготовительных процедур.
Также она будет полезна, если ваш объект содержит
большие объемы данных, которые вам не нужно сохранять.
Аналогично, unserialize() проверяет наличие
магической функции __wakeup. Если она есть,
то ее можно использовать для воссоздания необходимых
ресурсов класса.
Функцию __wakeup предполагается использовать для
пересоздания соединений с базами данных, которые потеряются
при сериализации и десериализации, и проведении
других инициализирующих действий.
Ninsuo ¶9 years ago
If you want to serialize all but one properties, you can use:
<?php
class A
{
protected $a = 1;
protected $b = 2;
protected $c = 3;
protected $d = 4; public function __sleep()
{
return array_diff(array_keys(get_object_vars($this)), array('d'));
}
}
Ninsuo ¶9 years ago
If you want to serialize all but one properties, you can use:
<?php
class MyClass
{
protected $a;
protected $b;
protected $c;
protected $d; public function __sleep()
{
return array_diff(get_object_vars($this), array('d'));
}
}