ProfiPHPProfiPHP
Категория: Функции обращения к переменным

Функция Serialize

Функция Serialize генерирует пригодное для хранения представление переменной.
string serialize( mixed $value )
Это полезно для хранения или передачи значений PHP между скриптами без потери их типа и структуры.

Для превращения сериализованной строки обратно в PHP-значение, используйте функцию Unserialize.

Параметр Value содержит значение, которое необходимо сериализовать. Функция Serialize обрабатывает все типы, кроме Resource. Возможно также сериализовать массивы, которые содержат ссылки на себя. Циклические ссылки внутри сериализуемого массива/объекта также сохраняются. Любые другие ссылки будут потеряны.

Функция Serialize возвращает строку, содержащую потоковое представление переменной Value, которая может быть сохранена где угодно.

Обратите внимание, что это бинарная строка, которая может включать нуль-байты, и ее нужно хранить и обрабатывать соответствующим образом. Например, вывод функции Serialize лучше хранить в BLOB поле базы данных, а не в полях типа CHAR или TEXT.

Пример использования:
$data = array ( 'link' => 'color', 'title' => 'red' );
echo serialize( $data );
Результат выполнения:
a:2:{s:4:"link";s:5:"color";s:5:"title";s:3:"red";}
А сейчас более детально о том, как происходит сериализация.

Создадим массив:
$my_array = array( 'red', 'blue', 'black' );
Теперь сериализуем его и выведем результат:
print_r( serialize( $my_array ) );
// a:3:{i:0;s:3:"red";i:1;s:4:"blue";i:2;s:5:"black";}
Как видим, сначала идет парамерт "a:3:{", который указывает, что Функция Serialize обработала 3 значения массива. Значения "i:0", "i:1", "i:2" указывает на индекс, а значение "s" в значениях "s:3:'red'", "s:4:'blue'", "s:5:'black'" указывает что данные имеет тип String.

Теперь создадим ассоциативный массив:
$my_array = array( 'coder1' => 'red', 'color2' => 'blue', 'color3' => 'black' );
print_r( serialize( $my_array ) );
// a:3:{s:6:"coder1";s:3:"red";s:6:"color2";s:4:"blue";s:6:"color3";s:5:"black";}
Как и в прошлом примере, после буквы "s" идет количество байт ячейки массива.

Теперь рассмотрим пример с использованием целочисленных данных:
$my_array = array( 'digit1' => 1, 'digit2' => 22, 'digit3' => 333 );
print_r( serialize( $my_array ) );
// a:3:{s:6:"digit1";i:1;s:6:"digit2";i:22;s:6:"digit3";i:333;}
Теперь вместо буквы "s" мы видим букву "i", которая означает Integer тип данных.

Сразу нужно заметить, что максимальное значение типа Indeter зависит от операционной системы. В 32-х битных системах максимальное знаковое целое лежит в диапазоне от -2147483648 до 2147483647. Если вы хотите записать большое цифровое значение, тогда лучше заключить его в одинарные или двойные кавычки:
$my_array = array( 'digit1' => '1', 'digit2' => '2234343434343434', 'digit3' => '333' );
Если вы определите число, превышающее пределы целого типа, оно будет интерпретировано как число с плавающей точкой. Также, если вы используете оператор, результатом работы которого будет число, превышающее пределы целого, вместо него будет возвращено число с плавающей точкой.
$number = 2147483647;
var_dump( $number );
// вывод: int(2147483647)

$number = 2147483648;
var_dump( $number );
// вывод: float(2147483648)
Рассмотрим основные типы данных функции Serialize: void (NULL), boolean (boolean), integer (integer), flonum (float), string (string), character (string), symbol (string), vector (array), alist (array), hash-table (array), N/A (object).

Последнее что мы рассмотрим, это пример сериализацию масива:
$first_array = array( 'digit1' => '1', 'digit2' => '2234343434343434', 'digit3' => '333' );
$secont_array = array( 'second_digit' => $first_array, 'other' => 'other info' );
print_r( serialize( $secont_array ) );
a:2:{s:12:"second_digit";a:3:{s:6:"digit1";s:1:"1";s:6:"digit2";s:16:"2234343434343434";s:6:"digit3";s:3:"333";}s:5:"other";s:10:"other info";}
И еще, чтобы вновь сделать сериализованную строку PHP-значением, используйте функцию Unserialize.

Добавить комментарий

Имя:
Текст комментария: