(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;
}
}
?>