interfaces/IHashable.md


Интерфейс IHashable

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

Описание

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

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

hash()

public function hash(): string

Описание: Возвращает хеш-значение объекта.

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

  • string — хеш-значение объекта

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

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

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

    • Применяйте хеш для быстрого сравнения объектов
    • Используйте хеш как уникальный идентификатор
    • Храните хеш в кэше для оптимизации производительности

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

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

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')
        );
    }
}

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

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

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

  • Исключение не всех значимых свойств из хеша
  • Использование слабых алгоритмов хеширования
  • Использование одинаковых хешей для разных состояний

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