interfaces/ISerializable.md


Интерфейс ISerializable

Пространство имён: goodboyalex\php_components_pack\interfaces
Версия: 1.0
Доступно с: 1.0

Описание

Интерфейс определяет контракт для классов, которые могут быть сериализованы и десериализованы. Используется для сохранения и восстановления состояния объектов.

Методы интерфейса

serialize()

public function serialize(): string

Описание: Преобразует объект в сериализованную строку.

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

  • string — сериализованное представление объекта

unSerialize()

public function unSerialize(string $serialized): void

Описание: Восстанавливает объект из сериализованной строки.

Параметры:

  • $serialized (string) — сериализованная строка

Рекомендации по реализации

  1. При реализации интерфейса:

    • Обеспечьте полное сохранение состояния объекта
    • Учитывайте все значимые свойства
    • Реализуйте корректную обработку ошибок
    • Обеспечьте безопасность при десериализации
  2. При использовании:

    • Проверяйте корректность входных данных
    • Обрабатывайте возможные ошибки
    • Сохраняйте целостность данных

Примеры реализации

Базовый пример

class User implements ISerializable
{
    private int $id;
    private string $name;
    private array $roles;

    public function serialize(): string
    {
        return serialize([
            'id' => $this->id,
            'name' => $this->name,
            'roles' => $this->roles
        ]);
    }

    public function unSerialize(string $serialized): void
    {
        $data = unserialize($serialized);
        $this->id = $data['id'];
        $this->name = $data['name'];
        $this->roles = $data['roles'];
    }
}

Пример с валидацией

class Product implements ISerializable
{
    private string $name;
    private float $price;
    private DateTime $createdAt;

    public function serialize(): string
    {
        return json_encode([
            'name' => $this->name,
            'price' => $this->price,
            'createdAt' => $this->createdAt->format('Y-m-d H:i:s')
        ]);
    }

    public function unSerialize(string $serialized): void
    {
        $data = json_decode($serialized, true);
        
        if (!isset($data['name']) || !isset($data['price'])) {
            throw new Exception('Некорректные данные');
        }
        
        $this->name = $data['name'];
        $this->price = $data['price'];
        $this->createdAt = new DateTime($data['createdAt']);
    }
}

Особенности реализации

  • Методы должны обеспечивать полное восстановление состояния
  • Необходимо учитывать все значимые свойства
  • Рекомендуется использовать безопасные методы сериализации
  • Важно обеспечить корректную обработку ошибок

Типичные ошибки

  • Потеря данных при сериализации
  • Некорректная обработка ошибок
  • Отсутствие валидации при десериализации
  • Утечка чувствительных данных

На главную | Содержание