interfaces/IHashable.md
Интерфейс IHashable
Пространство имён: goodboyalex\php_components_pack\interfaces
Версия: 1.0
Доступно с: 1.2
Описание
Интерфейс определяет контракт для классов, которые могут генерировать хеш-значение на основе своих данных. Используется для уникальной идентификации объектов.
Методы интерфейса
hash()
public function hash(): string
Описание: Возвращает хеш-значение объекта.
Возвращаемое значение:
string— хеш-значение объекта
Рекомендации по реализации
-
При реализации интерфейса:
- Используйте надёжные алгоритмы хеширования
- Включайте все значимые свойства объекта
- Обеспечьте уникальность хеша для разных состояний объекта
-
При использовании:
- Применяйте хеш для быстрого сравнения объектов
- Используйте хеш как уникальный идентификатор
- Храните хеш в кэше для оптимизации производительности
Примеры реализации
Базовый пример
class User implements IHashable
{
private int $id;
private string $email;
private string $passwordHash;
public function hash(): string
{
return hash('sha256', $this->id . $this->email . $this->passwordHash);
}
}
Пример с учётом временных меток
class Order implements IHashable
{
private int $orderId;
private float $totalAmount;
private DateTime $createdAt;
public function hash(): string
{
return hash('sha256',
$this->orderId .
$this->totalAmount .
$this->createdAt->format('Y-m-d H:i:s')
);
}
}
Особенности реализации
- Хеш должен однозначно определять состояние объекта
- Все значимые свойства должны участвовать в генерации хеша
- Рекомендуется использовать стойкие алгоритмы хеширования
- Хеш должен быть достаточно длинным для предотвращения коллизий
Типичные ошибки
- Исключение не всех значимых свойств из хеша
- Использование слабых алгоритмов хеширования
- Использование одинаковых хешей для разных состояний