Добавлен черновик заметки про пхп сериализацию

This commit is contained in:
Anton Vakhrushev 2019-04-14 19:11:38 +03:00
parent 2999e04391
commit 378d241651
3 changed files with 32 additions and 4 deletions

View File

@ -35,6 +35,7 @@ format:
./tools/npm run format-js
./tools/npm run format-vue
./tools/npm run format-style
./tools/npm run format-md
format-php:
./tools/php-cs-fixer fix

View File

@ -34,7 +34,7 @@
"format-js": "prettier --single-quote --trailing-comma es5 --write \"./source/_assets/**/*.js\"",
"format-vue": "prettier --single-quote --trailing-comma es5 --write \"./source/_assets/**/*.vue\"",
"format-style": "prettier --single-quote --write \"source/_assets/**/*.scss\"",
"format-md": "prettier --write \"source/**/*.md\""
"format-md": "prettier --print-width=80 --parser=markdown --write \"source/**/*.md\""
},
"dependencies": {}
}

View File

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