Думаю многим известны «магические» методы __sleep и __wakeup для управления сериализацией объектов.
Казалось бы все просто:
__sleep вызывается перед сериализацией чтоб можно было убрать ненужные связи (бд, мемкэш и тд).
__wakeup вызывается после unserialize, чтоб можно было автоматом необходимые связи вернуть в зад.
Но есть нюанс. Причем я сталкивался с ним раза 4 за последние 5 лет работы.
1. метод __sleep обязательно должен вернуть массив со списком свойств, которые нужно сериализовать
2. Если объект сериализуется, а потом продолжает использоваться, он может быть испорчен, так как при сериализации был вызван метод __sleep.
В заблуждение вводит пример из руководства
public function __sleep()
{
mysql_close($this->link);
}
Сделав все по примеру мало того что после результатом сериализации будет NULL, но и сам объект будет испорчен )))
Так что будьте бдительны и внимательно читайте руководство ))))
Казалось бы все просто:
__sleep вызывается перед сериализацией чтоб можно было убрать ненужные связи (бд, мемкэш и тд).
__wakeup вызывается после unserialize, чтоб можно было автоматом необходимые связи вернуть в зад.
Но есть нюанс. Причем я сталкивался с ним раза 4 за последние 5 лет работы.
1. метод __sleep обязательно должен вернуть массив со списком свойств, которые нужно сериализовать
2. Если объект сериализуется, а потом продолжает использоваться, он может быть испорчен, так как при сериализации был вызван метод __sleep.
В заблуждение вводит пример из руководства
public function __sleep()
{
mysql_close($this->link);
}
Сделав все по примеру мало того что после результатом сериализации будет NULL, но и сам объект будет испорчен )))
Так что будьте бдительны и внимательно читайте руководство ))))