Что такое сериализация данных?


Прежде всего, я не смог получить четкое определение этого из Википедии или даже из функции сериализации в руководстве по PHP. Мне нужно знать, в каких случаях нам нужен термин сериализация и как обстоят дела без него? Другими словами, там, где вам необходима сериализация, и без нее в вашем коде будет отсутствовать какая-то важная функция.

Author: Jean-Rémy Revy, 2012-08-05

5 answers

Что такое сериализация?

Сериализация - это кодирование объектов на другой язык. Например, у вас есть массив в PHP, подобный этому:

$array = array("a" => 1, "b" => 2, "c" => array("a" => 1, "b" => 2));

, А затем вы хотите сохранить его в файле или отправить в другое приложение.

Существует несколько вариантов языков, но идея одна и та же: Этот массив должен быть закодирован (или переведен) в текст или байты, которые могут быть записаны в файл или отправлены по сети. Например, если вы

$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 и т. Д. (Они имеют особое назначение)
  • Байты
  • ...
  • ...
  • ...
  • Ваши собственные форматы (вы можете создать свой собственный формат для сериализации и использовать его, но это большая задача, и в большинстве случаев она того не стоит)

Надеюсь, я помог!

 63
Author: Dovydas Navickas, 2014-09-29 21:26:34

Сериализация - это процесс преобразования некоторого объекта в памяти в другой формат, который может быть использован либо для хранения в файле, либо для отправки по сети. Десериализация - это обратный процесс, означающий, что фактический экземпляр объекта восстанавливается из заданного сериализованного представления объекта. Это очень полезно при обмене данными между различными системами.

Формат сериализации может быть либо совместимым , либо не совместимым . Совместимый форматы (такие как JSON, XML,...) позволяют сериализовать некоторый объект с использованием данной платформы и десериализовать его с использованием другой платформы. Например, с помощью JSON вы можете использовать javascript для сериализации объекта и отправки его по сети в PHP-скрипт, который десериализует объект и использует его.

В serialize() Функция PHP использует не совместимый формат. Это означает, что только PHP может использоваться как для сериализации, так и для десериализации объекта обратно.

Вы могли бы использовать json_encode и json_decode() функции для сериализации/десериализации объектов PHP с использованием совместимого формата JSON.

 13
Author: Darin Dimitrov, 2016-12-23 15:43:32

Сериализация - это процесс преобразования данных (например, переменных) в представление, такое как строка, которое можно легко записать и прочитать, например, из файла или базы данных.

Варианты использования? Их много, но в целом они вращаются вокруг идеи взять сложный вложенный массив или объект и превратить его в простую строку, которую можно сохранить и прочитать позже, чтобы получить ту же структуру. Например, при условии, что у вас есть в php:

$blub = array();
$blub['a'] = 1;
$blub['a']['b'] = 4;
$blub['b'] = 27;
$blub['b']['b'] = 46;

Вместо того, чтобы идти просматривая каждый элемент массива по отдельности и записывая его, можно было бы просто:

$dataString = serialize($blub);

И сериализованный массив готов к записи в любом месте в виде простой строки, таким образом, чтобы при повторном извлечении этой строки и выполнении функции unserialize() над ней вы получили точно такую же структуру массива, которая была у вас раньше. Да, это действительно так просто.

 4
Author: Mahn, 2012-08-05 16:24:38

Мне нужно знать, в каких случаях нам нужен термин сериализация и как обстоят дела без него?

Сериализация может оказаться удобной, если вам нужно хранить полные структуры (например, счет-фактуру со всеми связанными данными, такими как адрес клиента, адрес отправителя, позиции продуктов, налоговые вычеты и т.д.), Которые действительны только в определенный момент времени.

Все эти данные изменятся в будущем, могут появиться новые налоговые правила, изменится адрес клиента, продукты уходят из жизни. Но все равно счет-фактура должен быть действительным и сохраненным.

Это возможно при сериализации. Как моментальный снимок. Объект в памяти сериализуется в двоичную форму (часто как в PHP), которую можно просто сохранить. Его можно вернуть к жизни позже (и в другом контексте). Как и в этом примере с накладной: через десять лет данные все еще можно будет прочитать, а объект накладной останется таким же, как и десять лет назад.

Другими словами, где вы должны нужна сериализация, и без нее в вашем коде будет отсутствовать какая-то важная функция.

Это был один из примеров. Это не значит, что вам всегда это нужно, но если все станет сложнее, сериализация может быть полезной.

 3
Author: hakre, 2012-08-05 16:35:21

Поскольку вы пометили его javascript, одним из видов сериализации может быть сериализация формы.

Вот ссылки на jQuery и prototype.JS эквиваленты.

Что они в основном делают, так это сериализуют входные значения формы в пары имя-значение, разделенные запятыми.

Поэтому, учитывая фактическое использование..

$.ajax({
   url : 'insert.php?a=10,b=15' //values serialized via .serialize()
   type: 'GET'
});

И вы, вероятно, сделали бы $GET["a"], чтобы получить эти значения, хотя я не знаком с PHP.

 1
Author: Robin Maben, 2012-08-05 16:21:03