Прежде всего, я не смог получить четкого определения этого из WikiPedia или даже из сериализовать в PHP
руководстве. Мне нужно знать некоторые случаи, когда нам нужен термин сериализация и как обстоят дела без него? Другими словами, где вам нужна сериализация, а без нее в вашем коде будет отсутствовать какая-то важная функция.
Что такое сериализация данных?
Ответы (5)
Что такое сериализация?
Сериализация кодирует объекты в другой формат.
Например, у вас есть такой массив в PHP:
$array = array("a" => 1, "b" => 2, "c" => array("a" => 1, "b" => 2));
И затем вы хотите сохранить его в файл или отправить в другое приложение.
Существует несколько вариантов формата, но идея одна и та же: массив должен быть закодирован (или, можно сказать, переведен) в текст или байты, которые можно записать в файл или отправить по сети.
Для например, в PHP, если вы:
$data = serialize($array);
вы получите это:
a:3:{s:1:"a";i:1;s:1:"b";i:2;s:1:"c";a:2:{s:1:"a";i:1;s:1:"b";i:2;}}
Это особый формат сериализации PHP, который понимает PHP, и он работает наоборот, поэтому вы можете использовать его для десериализации объектов.
Например, вы сохранили сериализованный массив в файле и хотите вернуть его обратно в свой код в виде массива:
$array = unserialize($data);
Но вы можете выбрать другой формат сериализации, например, JSON:
$json = json_encode($array);
даст вам это:
{"a":1,"b":2,"c":{"a":1,"b":2}}
Результат не только легко сохраняется, читается человеческим глазом или отправляется по сети, но также понятен практически для любого другого языка (JavaScript, Java, C#, C++, ...)
Заключение
Сериализация переводит объекты в другой формат, если вы хотите хранить данные или делиться ими.
Бывают ли ситуации, когда вы ничего не можете сделать, кроме как сериализовать это?
Нет. Но сериализация обычно упрощает задачу.
Являются ли форматы JSON и PHP единственными возможными форматами?
Нет, нет, нет и еще раз нет. Форматов очень много.
- XML, у которого есть преемники, такие как SOAP, WSDL и т. Д. (У них есть конкретная цель)
- Байты, Protobuf и т.д.
- Ямл
- ...
- ...
- Ваши собственные форматы (вы можете создать свой собственный формат для сериализации и использовать его, но это большая вещь, и в большинстве случаев она того не стоит)
a
означает массив, за которым следует количество элементов. Внутри фигурных скобок этого массива s
обозначает строку и указывает количество символов в следующей строке. Строки чередуются между именем ключа и его значением для каждого элемента в массиве. Любое значение также может быть сериализованным массивом.
- person SherylHohman; 15.06.2019
Сериализация — это процесс преобразования некоторого объекта в памяти в другой формат, который можно использовать либо для сохранения в файле, либо для отправки по сети. Десериализация — это обратный процесс, означающий, что фактический экземпляр объекта восстанавливается из заданного сериализованного представления объекта. Это очень полезно при обмене данными между различными системами.
Формат сериализации может быть как совместимым, так и несовместимым. Интероперабельные форматы (такие как JSON, XML, ...) позволяют сериализовать некоторый объект с использованием данной платформы и десериализовать его с использованием другой платформы. Например, с помощью JSON вы можете использовать javascript для сериализации объекта и отправки его по сети в PHP-скрипт, который десериализует объект и будет использовать его.
Функция PHP serialize()
использует несовместимый формат. Это означает, что только PHP можно использовать как для сериализации, так и для десериализации объекта обратно.
Вы можете использовать json_encode
и json_decode()
для сериализации/десериализации объектов PHP с использованием формата взаимодействия JSON.
Сериализация — это процесс преобразования данных (например, переменных) в представление, такое как строка, которую можно легко записать и прочитать, например, из файла или базы данных.
Случаи применения? Их много, но обычно они вращаются вокруг идеи взять сложный вложенный массив или объект и превратить его в простую строку, которую можно сохранить и прочитать позже, чтобы получить ту же структуру. Например, если у вас есть в php:
$blub = array();
$blub['a'] = 1;
$blub['a']['b'] = 4;
$blub['b'] = 27;
$blub['b']['b'] = 46;
Вместо того, чтобы просматривать каждый элемент массива по отдельности и записывать его, можно было бы просто:
$dataString = serialize($blub);
И сериализованный массив готов к записи в любом месте в виде простой строки таким образом, что повторное получение этой строки и выполнение над ней unserialize() дает вам точно такую же структуру массива, которая была у вас раньше. Да, это действительно так просто.
Мне нужно знать, в каких случаях нам нужен термин сериализация и как обстоят дела без него?
Сериализация может оказаться удобной, если вам нужно хранить полные структуры (например, счет-фактуру со всеми связанными данными, такими как адрес клиента, адрес отправителя, позиции продукта, налоговые расчеты и т. д.), которые действительны только в определенный момент времени.
Все эти данные изменятся в будущем, могут появиться новые налоговые правила, измениться адрес покупателя, продукты уйдут из жизни. Но все равно счет-фактура должен быть действительным и храниться.
Это возможно с сериализацией. Как снимок. Объект в памяти сериализуется в (часто как в PHP) бинарную форму, которую можно просто сохранить. Его можно вернуть к жизни позже (и в другом контексте). Как в этом примере со счетом: через десять лет данные все еще можно прочитать, а объект счета будет таким же, как и десятью годами ранее.
Другими словами, где вам нужна сериализация, а без нее в вашем коде будет отсутствовать какая-то важная функция.
Это был один пример. Это не всегда нужно, но если что-то становится более сложным, сериализация может быть полезной.
Поскольку вы пометили его javascript
, одним из видов сериализации может быть сериализация форм.
Вот ссылки на jQuery и prototype.JS.
Что они в основном делают, так это сериализуют входные значения формы в пары "имя-значение", разделенные запятыми.
Итак, учитывая фактическое использование ..
$.ajax({
url : 'insert.php?a=10,b=15' //values serialized via .serialize()
type: 'GET'
});
И вы, вероятно, сделали бы $GET["a"]
, чтобы получить эти значения, хотя я не знаком с PHP.
{prop:{prop:1}}
. Перенесите это на другой компьютер, и, как минимум, вы сможете работать со свойствами этого объекта с той же базовой взаимосвязьюprop.prop
. - person Jared Farrish   schedule 05.08.2012json_encode
является легким и уже обрабатывает массивы. - person Jared Farrish   schedule 05.08.2012