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