Сериализация в 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 и специальные функции для превращения объекта в массив и обратно.

01.06.2019, anton@vakhrushev.me