AdSense - шапка

суббота, 26 ноября 2011 г.

PHP. Сериализация объектов в JSON

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

В примере я покажу, как проводить сериализацию объектов в JSON формат.
Сериализация очень удобна для:
  1. Обмена данными между клиентской и серверной частью приложения (js и php), поскольку JSON - есть нотация объектов в JavaScript.
  2. В сериализованном виде удобно обмениваться информация между web - приложениями. Тут использование JSON не обязательно, можно, например, использовать XML.
Пример сериализации
Для сериализации объектов мы будем использовать интерфейс Serializable.
Пример сериализуемого класса "Пользователь":
class User implements Serializable
{
 /**
  * Имя
  */
 private $name = "";
 /**
  * Возраст
  */
 private $age = 0;
 
 public function __construct($name = "", $age = 0)
 {
  $this->name = $name;
  $this->age = $age;
 }
 
 public function getName()
 {
  return $this->name;
 }
 
 public function getAge()
 {
  return $this->age;
 }
 
 /**
  * Сериализует объект в строку.
  * 
  * @return string
  */
 public function serialize ()
 {
  $objectData = array(
   "name"  => $this->name,
   "age" => $this->age,
  );
  return json_encode($objectData);
 }
 
 /**
  * Производит десериализацию - по полученной строке формирует объект.
  * 
  * @param serialized
  */
 public function unserialize ($serialized)
 {
  $objectData = json_decode($serialized, true);
  $this->name = $objectData['name'];
  $this->age = $objectData['age'];
 }
}
Теперь небольшой пример использования сериализации:
$user = new User("My User Name", 20);
$serialized = $user->serialize();
var_dump($serialized);
На выходе получим строку в JSON формате:
{"name":"My User Name","age":20}
Имея строковое представления объекта, можно провести десериализацию:
$newUser = new User();
$newUser->unserialize($serialized);
var_dump($newUser);
У нас получился следующий объект:
object(User)#2 (2) {
  ["name":"User":private]=>
  string(12) "My User Name"
  ["age":"User":private]=>
  int(20)
}
Как видите, поля объекта идентичны полям сериализованного объекта.

Итак, использование сериализации может в значительной степени облегчить вашу жизнь как при программировании взаимодействия между клиентом и сервером, там и при организации взаимодействия между несколькими web-приложениями, при том, что сериализация крайне проста в реализации и очень удобная для понимания.

Комментариев нет:

Отправить комментарий