diff --git a/Makefile b/Makefile index 52330ae..dd96e54 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/package.json b/package.json index bbd9e69..3d5d9ef 100644 --- a/package.json +++ b/package.json @@ -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": {} } diff --git a/source/_articles/php-serialization.md b/source/_articles/php-serialization.md index b20a976..b9899ba 100644 --- a/source/_articles/php-serialization.md +++ b/source/_articles/php-serialization.md @@ -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 и специальные +функции для превращения объекта в массив и обратно.