PHPCon Poland 2024

igbinary_serialize

(PECL igbinary >= 1.1.1)

igbinary_serializeСоздаёт компактное, сохраняемое двоичное представление значения

Описание

igbinary_serialize(mixed $value): string|false

Создаёт сохраняемое представление значения.

Полезно для хранения или передачи значений PHP без потери их типа и структуры.

Чтобы снова превратить сериализованную строку в значение PHP, можно использовать igbinary_unserialize().

Список параметров

value

Значение, которое необходимо сериализовать. igbinary_serialize() обрабатывает все типы, кроме ресурсов (resource) и некоторых объектов (object) (смотрите примечание ниже). Даже массивы (array), содержащие ссылки на себя, могут быть сериализованы функцией igbinary_serialize(). Циклические ссылки внутри сериализующихся массивов (array) или объектов (object) также будут сохранены. Любая другая ссылка будет потеряна.

При сериализации объектов, igbinary будет пытаться вызвать функции __serialize() или __sleep() перед сериализацией. Это позволит объекту выполнить любую очистку в последнюю минуту и т.д. перед сериализацией. Аналогичным образом, когда объект восстанавливается с помощью igbinary_unserialize(), вызывается функция __unserialize() или __wakeup().

Замечание:

Начало имён закрытых членов объекта (object) дополняются именем класса, а начало имён защищённых членов символом '*'. Эти дополненные значения окружаются нулевым байтом с обеих сторон.

Возвращаемые значения

Возвращает строку, содержащую представление потока байтов value, которое может быть сохранено где угодно.

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

Примеры

Пример #1 Пример использования igbinary_serialize()

<?php
$ser
= igbinary_serialize(['test', 'test']);
echo
urlencode($ser), "\n";
var_export(igbinary_unserialize($ser));
?>

Результат выполнения приведённого примера:

%00%00%00%02%14%02%06%00%11%04test%06%01%0E%00
array (
  0 => 'test',
  1 => 'test',
)

Примечания

Замечание:

Обратите внимание, что многие встроенные объекты PHP не могут быть сериализованы. Однако те, у кого есть такая возможность, реализуют либо интерфейс Serializable, либо магические методы __serialize()/__unserialize() или __sleep()/__wakeup(). Если внутренний класс не соответствует ни одному из этих требований, он не может быть надёжно сериализован с помощью какого-либо сериализатора.

Есть несколько исторических исключений из приведённого выше правила, когда некоторые внутренние объекты могут быть сериализованы без реализации интерфейса или раскрытия методов.

Смотрите также

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top