Понедельник, 29.04.2024, 09:40
Меню сайта
Категории раздела
JQuery плагины [59]
JQuery уроки [69]
PHP полезное [24]
PHP уроки [21]
Css [26]
JS [3]
SQL [9]
Css 3 [17]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » PHP уроки

Сериализация php (serialize)


Сериализация php


Здравствуйте уважаемые читатели блога, здравствуйте уважаемые читатели, в этой статье я приведу примеры php сериализации. Но для начала давайте выясним, что же это за страшное слово, и причем тут программирование. Не знаю, как у вас, но у меня слово сериализация стоит в одном ассоциативном ряду с сериалами. На самом деле сериалы и процесс сериализации данных в php никак не соотносятся друг с другом.

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

Десериализация - процесс конвертирования строки полученной при сериализации обратно в сложную структуру.


Для чего и как используется

Сериализация, в php имеет с первого взгляда непонятное назначение, но очень полезное в программировании крупных систем, в которых идет плотная работа с сохранением и передачей информации. Представьте, что перед вами стоит задача, передать какую либо структуру данных (массив, объект, список, и др.) из одного скрипта в другой, возможно даже находящийся на другом сервере. Так как каждая из структур является набором информации со сложными взаимосвязями, не плохо бы до передачи, конвертировать ее в одну строку, и впоследствии делать с ней все что угодно (сохранять в БД, отсылать на другой сервер, и т.д.). Если подумать , то мы поймем, что действительно без процесса сериализации данных тут не обойтись.

После получения сериализованной строки, мы сможем сохранить ее в БД до лучших времен, или отправить через поля форм <input>, и даже передать в контексте url. Ровно также как и при реализации корзины в интерет магазине, мы сможем сохранить строку в cookies .

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

PHP функции сериализации и десериализации

Для того чтобы сериализовать объект в строку и обратно, мы может воспользоваться уже рассмотренным ранее форматом JSON, но это уже немного изощрённый подход, в обычных же случаях нам подойдут две базовые php функции:
  • serialize() – Конвертирует полученный объект в строку для хранения и передачи.
  • unserialize() – Конвертирует строку в объект для дальнейшей работы с ним.

Простой php пример сериализации объекта


<?php
class Product
{
  public $product_name = "";
  private $available = false;
 
  public function setAvailable() {
    $this->available = true;
  }
 
  public function unsetAvailable() {
    $this->available = false;
  }
 
  public function getInfo() {
    return $this->available;
  }

}
 
$item = new Product();
$item->product_name = "Пылесос";
$item->setAvailable();
 
$itemString = serialize($item);

//.. тут могут осуществляться любые действия на  $item..//

print "<hr/>1) Объект <b>\$item:</b>  <pre>";print_r($item); print "</pre><hr/>";
print "2) Сериализованный в строку объект  <b> \$item</b>   <pre>";print_r($itemString); print "</pre><hr/>";
print "3) Десериализация полученной строки в новый объект <b>\$backup_item</b>:<hr/>";

$backup_item = unserialize($itemString);

print "4) Восстановленный из строки объект  <b> \$backup_item</b>   <pre>";print_r($backup_item); print "</pre><hr/>";
print "5) Получаем поле \"название\" восстановленного объекта <b> \$backup_item->product_name</b>   <pre>".$backup_item->product_name."</pre><hr/>";
?>


Коротко опишу суть приведенного кода. Объявляется класс Product, в котором содержится два поля: $product_name – наименование продукта и $available –флаг наличия на складе. Причем второе поле private доступно только внутри методов данного класса. Далее в скрипте мы создаем экземпляр класса Product, а именно объект $item. Делаем над полями объекта определенные действия и сериализуем его в строку. Следом за сериализацией в скрипте мы может делать абсолютно любые действия над $item, и это уже никак не повлияет на сериализованную строку.


Также в этом промежутке мы можем полученную строку передать в другой скрипт, или записать в БД. Последующие действия демонстрируют процесс сериализации и дессериализации, выводя данные на экран. Я уверен, в том, что если вы запустите этот скрипт, то вам сразу станет ясна его работа.

Пример сериализации php

Вот так будет выглядеть объект $item, в сериализованном виде:


O:7:"Product":2:{s:12:"product_name";s:7:"Пылесос";s:18:"Productavailable";b:1;}

Не пугайтесь , понять это не так сложно как кажется.

  • O:7:”Product”:2: – объект класса "Product”, в названии 7 символов, содержит 2 поля.
  • s:12:”product_name” – строковая переменная, название поля "product_name” из 12 символов.
  • s:7:”Пылесос” – строка из 7 символов "Пылесос”.
  • b:1 – булево значение true;

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

Поддерживаемые функцией serialize() типы данных:


i:4; // - тип integer
s:6:"qwerty"; // - тип string
b:1; //- тип boolean
a:3:{...} //array
O:9:"TestClass":1:{...} //object

Также для кодирования могут быть использованы символы вида \0*\0 – нуль байты.


Важные моменты:

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

Также важным является использование функции addslashes(), перед сохранением в БД объекта, ну и соответственно не забудьте применить обратную функцию stripslashes(). Если же вы работаете с НТТР протоколом, то необходимо использовать функцию urlencode().

  • addslashes() – экранирует кавычки.
  • stripslashes() – возвращает кавычкам человеческий вид.
  • urlencode() – заменяет лишние символы на знак процента (%) с 16-ричными цифрами, а пробел меняет на плюс (+).



Категория: PHP уроки | Добавил: ChronoW (25.04.2013)
Просмотров: 3685 | Комментарии: 1 | Теги: сериалайз, Сериализация php, addslashes, serialize, unserialize | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: