Интерфейс 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 serialize(): ?string
public 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());

?>

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

string(59) "C:3:"obj":44:{s:36:"Мои закрытые данные";}"
string(36) "Мои закрытые данные"

Содержание