(PECL ds >= 1.0.0)
Ds\Hashable::hash — Возвращает скалярное значение для использования в качестве значения хеша
Возвращает скалярное значение, которое будет использоваться в качестве значение хеша объектов.
   В то время как значение хеша само по себе не гарантирует идентичность объектов, но
   всё же все объекты, равные при проверке с помощью функции
   Ds\Hashable::equals(), должны иметь одно и то же значение хеша.
   Значение хешей для одинаковых объектов
   не обязаны быть уникальными, к примеру вы можете просто возвращать true для
   всех объектов и ничего не сломается. Единственным последствием будет то, что
   ваша хеш-таблица превратится в связанный список, потому что хеши всех объектов
   будут содержаться в одном блоке. Из этого следует, что важно выбирать хорошее
   значение хеша, например уникальный идентификатор или адрес электронной почты.
  
Этот метод позволяет использовать объекты в качестве ключей в таких структурах как Ds\Map и Ds\Set или любых других структурах, распознающих этот интерфейс.
Не выбираете значение, которое может измениться, например, из общедоступных свойств. Поиск в хеш-таблице завершится неудачей, если это значение изменится.
Все одинаковые объекты должны иметь одно и то же значение хеша.
Сигнатура функции не содержит параметров.
Скалярное значение для использования как значение хеша.
Пример #1 Пример использованияDs\Hashable::hash()
<?php
class HashableObject implements \Ds\Hashable
{
    private $name;
    private $email;
    public function __construct($name, $email)
    {
        $this->name  = $name;
        $this->email = $email;
    }
    /**
     * Должно возвращать одинаковое значение для всех объектов, которые
     * должны считаться идентичными. Это значение не должно использоваться
     * в простом сравнении для определения идентичности объектов.
     */
    public function hash()
    {
        return $this->email;
    }
    /**
     * Функция определения идентичности объектов. Обычно проверяют, что
     * значения хешей обоих объектов совпадают. Но можно добавить
     * дополнительные проверки.
     */
    public function equals($obj): bool
    {
        return $this->name  === $obj->name
            && $this->hash() === $obj->hash();
    }
}
?>