PHP 8.4.2 Released!

Ds\Hashable::hash

(PECL ds >= 1.0.0)

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

Описание

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

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

В то время как значение хеша само по себе не гарантирует идентичность объектов, но всё же все объекты, равные при проверке с помощью функции 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();
}
}
?>
Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top