1.6 KiB
title |
---|
Сериализация в PHP |
Сериализация в PHP
В PHP есть две функции для сериализации и десериализации данных: serialize()
и unserialize()
.
Функции встроены в язык, не требуют дополнительных модулей.
В один момент кто-то решает использовать их для долговременного хранения объектов. В базе данных, на диске, еще где-то.
namespace Test\Serialize;
class A {}
$a = new A();
serialize($a);
И тут начинаются проблемы.
Дело в том, что при сериалзации объектов классов кроме самих данных объекта сохраняется еще и информация о классе. Его имя, пространство имен.
Результатом сериализации в примере выше будет:
O:16:"Test\Serialize\A":0:{}O:16:"Test\Serialize\A":0:{}
Если теперь произвести рефакторинг, переместить класс, изменить пространство имен, то десериализация уже не сработает. И будет больно.
Не делайте так.
Контролируйте процесс сериализации. Например используйте JSON и специальные функции для превращения объекта в массив и обратно.