Сериализация в 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