# Интерфейс Serializable

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

## Введение

Интерфейс ввели для пользовательской сериализации.

Классы, которые реализуют этот интерфейс, больше не поддерживают магические методы __sleep() и __wakeup(). При каждой сериализации экземпляра класса вызывается интерфейсный метод serialize. Этот метод не вызывает метод __destruct() и не выполняет побочных действий, кроме тех, которые запрограммировали внутри метода. Механизм сериализации знает класс, представление которого десериализует, и вместо вызова метода __construct() как конструктор вызывается интерфейсный метод unserialize(), который соответствует классу. Стандартный конструктор вызывают в методе десериализации, если требуется.

Внимание

Начиная с PHP 8.1.0 класс, который реализует интерфейс Serializable без реализации методов __serialize() и __unserialize(), выдаст предупреждение об устаревании.

## Обзор интерфейса

interface Serializable {
/* Методы */
public function serialize(): ?string
public function unserialize(string `$data`): void
}

## Примеры

Пример #1 Базовый пример реализации интерфейса

    <?php

    class obj implements Serializable
    {
        private $data;

        public function __construct()
        {
            $this->data = "Мои закрытые данные";
        }

        public function serialize()
        {
            return serialize($this->data);
        }

        public function unserialize($data)
        {
            $this->data = unserialize($data);
        }

        public function getData()
        {
            return $this->data;
        }
    }

    $obj = new obj();
    $ser = serialize($obj);

    var_dump($ser);

    $newobj = unserialize($ser);

    var_dump($newobj->getData());

    ?>

Вывод приведённого примера будет похож на:

    Deprecated: obj implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in script on line 2
    string(59) "C:3:"obj":44:{s:36:"Мои закрытые данные";}"
    string(36) "Мои закрытые данные"

## Содержание

- Serializable::serialize — Представляет объект в виде строки
- Serializable::unserialize — Создаёт объект

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open