Что такое сериализация данных?
Прежде всего, я не смог получить четкое определение этого из WikiPedia или даже из функции сериализации в руководстве по PHP. Мне нужно знать, в каких случаях нам нужен термин сериализация и как обстоят дела без него? Другими словами, там, где вам нужна сериализация, и без нее в вашем коде будет отсутствовать какая-то важная функция.
5 ответов
Что такое сериализация?
Сериализация - это кодирование объектов на другой язык. Например, у вас есть массив в 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, хотя.