Ds\Hashable::hash
(PECL ds >= 1.0.0)
Ds\Hashable::hash — Retorna um valor escalar a ser usado como valor de hash
Descrição
Retorna um valor escalar a ser usado como valor de hash dos objetos.
Embora o valor de hash não defina igualdade, todos os objetos que são iguais de acordo com Ds\Hashable::equals()
devem ter o mesmo valor de hash. Os valores de hash de objetos iguais não precisam ser exclusivos. Por exemplo,
pode-se simplesmente retornar true
para todos os objetos e nada quebraria - a única
implicação seria que as tabelas de hash se transformariam em listas encadeadas porque todos
os seus objetos seriam hashados para o mesmo bucket. Portanto, é muito importante
escolher um bom valor de hash, como um ID ou endereço de e-mail.
Este método permite que objetos sejam usados como chaves em estruturas como Ds\Map e Ds\Set, ou qualquer outra estrutura de pesquisa que honre esta interface.
Não escolha um valor que possa mudar dentro do objeto, como uma propriedade pública. As consultas de tabela de hash falhariam porque o hash mudou.
Todos os objetos que são iguais devem ter o mesmo valor de hash.
Parâmetros
Esta função não possui parâmetros.
Valor Retornado
Um valor escalar a ser usado como valor de hash deste objeto.
Exemplos
Example #1 Ds\Hashable::hash() exemplo
<?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;
}
}
?>