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) — сериализованная строка
Рекомендации по реализации
-
При реализации интерфейса:
- Обеспечьте полное сохранение состояния объекта
- Учитывайте все значимые свойства
- Реализуйте корректную обработку ошибок
- Обеспечьте безопасность при десериализации
-
При использовании:
- Проверяйте корректность входных данных
- Обрабатывайте возможные ошибки
- Сохраняйте целостность данных
Примеры реализации
Базовый пример
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']);
}
}
Особенности реализации
- Методы должны обеспечивать полное восстановление состояния
- Необходимо учитывать все значимые свойства
- Рекомендуется использовать безопасные методы сериализации
- Важно обеспечить корректную обработку ошибок
Типичные ошибки
- Потеря данных при сериализации
- Некорректная обработка ошибок
- Отсутствие валидации при десериализации
- Утечка чувствительных данных