serialize - Генерирует пригодное для хранения представление переменной
Вернуться к: Функции для работы с переменными
serialize
(PHP 4, PHP 5, PHP 7)
serialize — Генерирует пригодное для хранения представление переменной
Описание
Генерирует пригодное для хранения представление переменной.
Это полезно для хранения или передачи значений PHP между скриптами без потери их типа и структуры.
Для превращения сериализованной строки обратно в PHP-значение, используйте функцию unserialize().
Список параметров
-
value
-
Значение, которое необходимо сериализовать. serialize() обрабатывает все типы, кроме resource. Возможно также сериализовать массивы, которые содержат ссылки на себя. Циклические ссылки внутри сериализуемого массива/объекта также сохраняются. Любые другие ссылки будут потеряны.
При сериализации объекта PHP пытается вызвать магический метод __sleep() перед сериализацией. Это делается для того, чтобы позволить объекту в последний момент произвести очистку и тому подобные операции перед сериализацией. Аналогично, когда объект восстанавливается функцией unserialize(), вызывается магический метод __wakeup().
Замечание:
В начало имен приватных членов объекта дополняется имя класса, а в начало имен защищенных членов '*'. Эти дополненные значения окружаются нулевым байтом (0x00) с обеих сторон.
Возвращаемые значения
Возвращает строку, содержащую потоковое представление переменной
value
, которая может быть сохранена где угодно.
Обратите внимание, что это бинарная строка, которая может включать нуль-байты, и ее нужно хранить и обрабатывать соответствующим образом. Например, вывод функции serialize() лучше хранить в BLOB поле базы данных, а не в полях типа CHAR или TEXT.
Примеры
Пример #1 Пример использования serialize()
<?php
// $session_data содержит многомерный массив с сессионной
// информацией о текущем пользователе. Мы используем serialize() для сохранения
// этой информации в базе данных в конце запроса.
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, $sqldata)) {
/* Код, выполняемый при ошибке.. */
}
}
?>
Примечания
Замечание:
Заметьте, что много встроенных в PHP объектов не может быть сериализовано. Однако, те из них, которые поддерживают эту возможность, реализуют или интерфейс Serializable, или магические методы __sleep() и __wakeup(). Если встроенный класс не удовлетворяет этим требованиям, он не может быть надежно сериализован.
Исторически есть некоторые исключения из вышеуказанного правила, когда некоторые внутренние объекты могут быть сериализованы без реализации интерфейса или магических методов. К примеру, ArrayObject до PHP 5.2.0.
При сериализации объектов функцией serialize(), лидирующий слеш не будет включен в имя класса с указанным пространством имен, для наилучшей обратной совместимости.
Смотрите также
- unserialize() - Создает PHP-значение из хранимого представления
- var_export() - Выводит в браузер или возвращает интерпретируемое строковое представление переменной
- json_encode() - Возвращает JSON-представление данных
- Serializing Objects
- __sleep()
- __wakeup()
Вернуться к: Функции для работы с переменными