(PECL ds >= 1.0.0)
Ds\Hashable::hash — Retorna um valor escalar a ser usado como valor de hash
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.
Esta função não possui parâmetros.
Um valor escalar a ser usado como valor de hash deste objeto.
Exemplo #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;
}
/**
* Deve retornar o mesmo valor para todos os objetos iguais, mas não precisa
* ser exclusivo. Este valor não será usado para determinar igualdade.
*/
public function hash()
{
return $this->email;
}
/**
* Isto determina a igualdade, normalmente durante uma pesquisa de tabela de hash para determinar
* se a chave corresponde à chave sendo pesquisada. O hash precisa ser igual se
* os objetos são iaguais, caso contrário esta determinação não seria alcançada.
*/
public function equals($obj): bool
{
return $this->name === $obj->name
&& $this->email === $obj->email;
}
}
?>