Добавлен черновик заметки про пхп сериализацию
This commit is contained in:
@ -4,10 +4,37 @@ title: Сериализация в PHP
|
||||
|
||||
# Сериализация в PHP
|
||||
|
||||
Не используйте стандартную сериализацию для долговременного хранения.
|
||||
В PHP есть две функции для сериализации и десериализации данных: `serialize()` и `unserialize()`.
|
||||
Функции встроены в язык, не требуют дополнительных модулей.
|
||||
|
||||
Не делайте так:
|
||||
В один момент кто-то решает использовать их для долговременного хранения объектов.
|
||||
В базе данных, на диске, еще где-то.
|
||||
|
||||
```
|
||||
namespace Test\Serialize;
|
||||
|
||||
class A {}
|
||||
|
||||
$a = new A();
|
||||
|
||||
```php
|
||||
serialize($a);
|
||||
```
|
||||
|
||||
И тут начинаются проблемы.
|
||||
|
||||
Дело в том, что при сериалзации объектов классов кроме самих данных объекта сохраняется еще и информация о классе.
|
||||
Его имя, пространство имен.
|
||||
|
||||
Результатом сериализации в примере выше будет:
|
||||
|
||||
```
|
||||
O:16:"Test\Serialize\A":0:{}O:16:"Test\Serialize\A":0:{}
|
||||
```
|
||||
|
||||
Если теперь произвести рефакторинг, переместить класс, изменить пространство имен, то десериализация уже не сработает.
|
||||
И будет больно.
|
||||
|
||||
Не делайте так.
|
||||
|
||||
Контролируйте процесс сериализации. Например используйте JSON и специальные
|
||||
функции для превращения объекта в массив и обратно.
|
||||
|
Reference in New Issue
Block a user