Что такое сериализация данных?
Прежде всего, я не смог получить четкое определение этого из Википедии или даже из функции сериализации в руководстве по PHP. Мне нужно знать, в каких случаях нам нужен термин сериализация и как обстоят дела без него? Другими словами, там, где вам необходима сериализация, и без нее в вашем коде будет отсутствовать какая-то важная функция.
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 и т. Д. (Они имеют особое назначение)
- Байты
- ...
- ...
- ...
- Ваши собственные форматы (вы можете создать свой собственный формат для сериализации и использовать его, но это большая задача, и в большинстве случаев она того не стоит)
Надеюсь, я помог!
Сериализация - это процесс преобразования некоторого объекта в памяти в другой формат, который может быть использован либо для хранения в файле, либо для отправки по сети. Десериализация - это обратный процесс, означающий, что фактический экземпляр объекта восстанавливается из заданного сериализованного представления объекта. Это очень полезно при обмене данными между различными системами.
Формат сериализации может быть либо совместимым , либо не совместимым . Совместимый форматы (такие как JSON, XML,...) позволяют сериализовать некоторый объект с использованием данной платформы и десериализовать его с использованием другой платформы. Например, с помощью JSON вы можете использовать javascript для сериализации объекта и отправки его по сети в PHP-скрипт, который десериализует объект и использует его.
В serialize()
Функция PHP использует не совместимый формат. Это означает, что только 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.