(PECL ds >= 1.0.0)
Ds\Hashable::hash — 返回一个标量值作为哈希值
返回一个标量值作为对象的哈希值。
虽然哈希值不定义相等性,但所有根据 Ds\Hashable::equals() 相等的都必须具有相同的哈希值。相等对象的哈希值不必是唯一的,例如,您可以对所有对象都返回 **true
**,并且不会出现任何问题 - 唯一的含义是哈希表将变成链表,因为所有对象都将被哈希到相同的桶中。因此,选择一个好的哈希值非常重要,例如 ID 或电子邮件地址。
此方法允许将对象用作 Ds\Map 和 Ds\Set 等结构中的键,或任何其他遵循此接口的查找结构。
不要选择可能在对象内发生变化的值,例如公共属性。哈希表查找将失败,因为哈希已更改。
所有相等的都必须具有相同的哈希值。
此函数没有参数。
一个标量值,用作此对象的哈希值。
示例 #1 Ds\Hashable::hash() 示例
<?php
class HashableObject implements \Ds\Hashable
{
private $name;
private $email;
public function __construct($name, $email)
{
$this->name = $name;
$this->email = $email;
}
/**
* 对于所有相等的都应返回相同的值,但不一定是唯一的。此值不会用于确定相等性。
*/
public function hash()
{
return $this->email;
}
/**
* 这决定了相等性,通常在哈希表查找期间用于确定桶的键是否匹配查找键。如果对象相等,则哈希必须相等,否则将无法达到此确定。
*/
public function equals($obj): bool
{
return $this->name === $obj->name
&& $this->email === $obj->email;
}
}
?>