Хешируемое
PHP Manual

Ds\Hashable::hash

(PECL ds >= 1.0.0)

Ds\Hashable::hashВозвращает скалярное значение для использования в роли хеша

Описание

abstract public mixed Ds\Hashable::hash ( void )

Возвращает скалярное значение для использования в роли хеша объекта.

В то время как значение хеша само по себе не гарантирует идентичность объектов, но это все-же обязательным условием при проверке с помощью функции Ds\Hashable::equals(). Значение хешей для одинаковых объектов не обязаны быть уникальными, к примеру вы можете просто возвращать TRUE для всех объектов и ничего не сломается. Единственным последствием будет то, что ваша хеш-таблица превратится в связанный список, потому что хеши всех объектов будут содержаться в одном блоке. Из этого следует, что важно выбирать хорошие значения/функции для создания хешей. Например уникальный идентификатор, или e-mail адрес.

Этот метод позволяет использовать объекты в качестве ключей в таких структурах как 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();
    }
}
?>

Хешируемое
PHP Manual