homepage/source/_articles/php-serialization.md

45 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Сериализация в PHP
description: Проблема долговременного хранения сериализованных данных
keywords: [php, serialization]
---
# Сериализация в 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 и специальные
функции для превращения объекта в массив и обратно.