(PECL ds >= 1.0.0)
Ds\Hashable::hash — Возвращает скалярное значение для использования в роли хеша
Возвращает скалярное значение для использования в роли хеша объекта.
В то время как значение хеша само по себе не гарантирует идентичность объектов, но
это все-же обязательным условием при проверке с помощью функции
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();
}
}
?>