(PECL ds >= 1.0.0)
Ds\Hashable::hash — Renvoie une valeur scalaire à utiliser comme valeur de hachage
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.
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é.
Tous les objets qui sont égaux doivent avoir la même valeur de hachage.
Cette fonction ne contient aucun paramètre.
Une valeur scalaire à utiliser comme valeur de hachage de cet objet.
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;
}
}
?>