Изменены ссылки на статьи

This commit is contained in:
2019-06-28 21:47:46 +03:00
parent 17a1a94c5c
commit 8a1162bb03
3 changed files with 1 additions and 1 deletions

View File

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