# Ds\Hashable::hash

(PECL ds >= 1.0.0)

Ds\Hashable::hash — Renvoie une valeur scalaire à utiliser comme valeur de hachage

### Description

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

Renvoie une valeur scalaire à utiliser comme valeur de hachage des objets.

Tant que la valeur de hachage ne définit pas l'égalité, tous les objets qui sont égaux selon Ds\Hashable::equals() doivent avoir la même valeur de hachage. Les valeurs de hachage des objets égaux n'ont pas à être uniques, par exemple vous pourriez simplement retourner `true` pour tous les objets et rien ne se casserait - la seule implication serait que les tables de hachage se transformeraient en listes chaînées car tous vos objets seront hachés dans le même seau. Il est donc très important que vous choisissiez une bonne valeur de hachage, telle qu'un ID ou une adresse e-mail.

Cette méthode permet d'utiliser des objets comme clés dans des structures telles que Ds\Map et Ds\Set, ou toute autre structure de recherche qui respecte cette interface.

Attention

Ne choisissez pas une valeur qui pourrait changer dans l'objet, comme une propriété publique. Les recherches dans les tables de hachage échoueraient car le hachage a changé.

Attention

Tous les objets qui sont égaux doivent avoir la même valeur de hachage.

### Liste de paramètres

Cette fonction ne contient aucun paramètre.

### Valeurs de retour

Une valeur scalaire à utiliser comme valeur de hachage de cet objet.

### Exemples

Exemple #1 Exemple de Ds\Hashable::hash()

`<?php
class HashableObject implements \Ds\Hashable
{
private $name;
private $email;
public function __construct($name, $email)
{
$this->name = $name;
$this->email = $email;
}
/**
* Doit renvoyer la même valeur pour tous les objets égaux, mais n'a pas à
* être unique. Cette valeur ne sera pas utilisée pour déterminer l'égalité.
*/
public function hash()
{
return $this->email;
}
/**
* Détermine l'égalité, généralement lors d'une recherche dans une table de hachage pour déterminer
* si la clé du seau correspond à la clé de recherche. Le hachage doit être égal si
* les objets sont égaux, sinon cette détermination ne serait pas atteinte.
*/
public function equals($obj): bool
{
return $this->name === $obj->name
&& $this->email === $obj->email;
}
}
?>`