Ds\Hashable::hash
(PECL ds >= 1.0.0)
Ds\Hashable::hash — Returns a scalar value to be used as a hash value
Description
Returns a scalar value to be used as the hash value of the objects.
While the hash value does not define equality, all objects that are equal according to Ds\Hashable::equals()
must have the same hash value. Hash values of equal objects don't have to be unique, for example
you could just return TRUE
for all objects and nothing would break - the only
implication would be that hash tables then turn into linked lists because all
your objects will be hashed to the same bucket. It's therefore very important
that you pick a good hash value, such as an ID or email address.
This method allows objects to be used as keys in structures such as Ds\Map and Ds\Set, or any other lookup structure that honors this interface.
Do not pick a value that might change within the object, such as a public property. Hash table lookups would fail because the hash has changed.
All objects that are equal must have the same hash value.
Exemples
Exemple #1 Ds\Hashable::hash() example
<?php
class HashableObject implements \Ds\Hashable
{
private $name;
private $email;
public function __construct($name, $email)
{
$this->name = $name;
$this->email = $email;
}
/**
* Should return the same value for all equal objects, but doesn't have to
* be unique. This value will not be used to determine equality.
*/
public function hash()
{
return $this->email;
}
/**
* This determines equality, usually during a hash table lookup to determine
* if the bucket's key matches the lookup key. The hash has to be equal if
* the objects are equal, otherwise this determination wouldn't be reached.
*/
public function equals($obj): bool
{
return $this->name === $obj->name
&& $this->email === $obj->email;
}
}
?>
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-ds-hashable.hash.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.