Добавлен черновик заметки про пхп сериализацию
This commit is contained in:
parent
2999e04391
commit
378d241651
1
Makefile
1
Makefile
@ -35,6 +35,7 @@ format:
|
|||||||
./tools/npm run format-js
|
./tools/npm run format-js
|
||||||
./tools/npm run format-vue
|
./tools/npm run format-vue
|
||||||
./tools/npm run format-style
|
./tools/npm run format-style
|
||||||
|
./tools/npm run format-md
|
||||||
|
|
||||||
format-php:
|
format-php:
|
||||||
./tools/php-cs-fixer fix
|
./tools/php-cs-fixer fix
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
"format-js": "prettier --single-quote --trailing-comma es5 --write \"./source/_assets/**/*.js\"",
|
"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-vue": "prettier --single-quote --trailing-comma es5 --write \"./source/_assets/**/*.vue\"",
|
||||||
"format-style": "prettier --single-quote --write \"source/_assets/**/*.scss\"",
|
"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": {}
|
"dependencies": {}
|
||||||
}
|
}
|
||||||
|
@ -4,10 +4,37 @@ title: Сериализация в PHP
|
|||||||
|
|
||||||
# Сериализация в PHP
|
# Сериализация в PHP
|
||||||
|
|
||||||
Не используйте стандартную сериализацию для долговременного хранения.
|
В PHP есть две функции для сериализации и десериализации данных: `serialize()` и `unserialize()`.
|
||||||
|
Функции встроены в язык, не требуют дополнительных модулей.
|
||||||
|
|
||||||
Не делайте так:
|
В один момент кто-то решает использовать их для долговременного хранения объектов.
|
||||||
|
В базе данных, на диске, еще где-то.
|
||||||
|
|
||||||
|
```
|
||||||
|
namespace Test\Serialize;
|
||||||
|
|
||||||
|
class A {}
|
||||||
|
|
||||||
|
$a = new A();
|
||||||
|
|
||||||
```php
|
|
||||||
serialize($a);
|
serialize($a);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
И тут начинаются проблемы.
|
||||||
|
|
||||||
|
Дело в том, что при сериалзации объектов классов кроме самих данных объекта сохраняется еще и информация о классе.
|
||||||
|
Его имя, пространство имен.
|
||||||
|
|
||||||
|
Результатом сериализации в примере выше будет:
|
||||||
|
|
||||||
|
```
|
||||||
|
O:16:"Test\Serialize\A":0:{}O:16:"Test\Serialize\A":0:{}
|
||||||
|
```
|
||||||
|
|
||||||
|
Если теперь произвести рефакторинг, переместить класс, изменить пространство имен, то десериализация уже не сработает.
|
||||||
|
И будет больно.
|
||||||
|
|
||||||
|
Не делайте так.
|
||||||
|
|
||||||
|
Контролируйте процесс сериализации. Например используйте JSON и специальные
|
||||||
|
функции для превращения объекта в массив и обратно.
|
||||||
|
Loading…
Reference in New Issue
Block a user