(PHP 5 >= 5.1.0, PHP 7, PHP 8)
Интерфейс ввели для пользовательской сериализации.
Классы, которые реализуют этот интерфейс, больше не поддерживают магические методы __sleep() и __wakeup(). При каждой сериализации экземпляра класса вызывается интерфейсный метод serialize. Этот метод не вызывает метод __destruct() и не выполняет побочных действий, кроме тех, которые запрограммировали внутри метода. Механизм сериализации знает класс, представление которого десериализует, и вместо вызова метода __construct() как конструктор вызывается интерфейсный метод unserialize(), который соответствует классу. Стандартный конструктор вызывают в методе десериализации, если требуется.
Начиная с PHP 8.1.0 класс, который реализует интерфейс Serializable без реализации методов __serialize() и __unserialize(), выдаст предупреждение об устаревании.
Пример #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) "Мои закрытые данные"