Pull to refresh

Нюансы сериализации

Reading time1 min
Views2.5K
Думаю многим известны «магические» методы __sleep и __wakeup для управления сериализацией объектов.

Казалось бы все просто:
__sleep вызывается перед сериализацией чтоб можно было убрать ненужные связи (бд, мемкэш и тд).
__wakeup вызывается после unserialize, чтоб можно было автоматом необходимые связи вернуть в зад.

Но есть нюанс. Причем я сталкивался с ним раза 4 за последние 5 лет работы.

1. метод __sleep обязательно должен вернуть массив со списком свойств, которые нужно сериализовать
2. Если объект сериализуется, а потом продолжает использоваться, он может быть испорчен, так как при сериализации был вызван метод __sleep.

В заблуждение вводит пример из руководства

public function __sleep()
{
mysql_close($this->link);
}

Сделав все по примеру мало того что после результатом сериализации будет NULL, но и сам объект будет испорчен )))

Так что будьте бдительны и внимательно читайте руководство ))))
Tags:
Hubs:
Total votes 53: ↑30 and ↓23+7
Comments26

Articles

Upcoming events