首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ds\Hashable::hash

(PECL ds >= 1.0.0)

Ds\Hashable::hash — Returns a scalar value to be used as a hash value.

描述

代码语言:javascript
复制
abstract public mixed Ds\Hashable::hash ( void )

返回要用作对象散列值的标量值。

尽管哈希值没有定义相等性,但根据Ds \ Hashable :: equals()相等的所有对象都必须具有相同的哈希值。相同对象的哈希值不必是唯一的,例如,您可以返回TRUE所有对象并且没有任何内容会被破坏 - 唯一的含义是哈希表会变成链接列表,因为所有对象都将哈希到相同桶。因此,选择一个好的散列值非常重要,例如ID或电子邮件地址。

此方法允许将对象用作Ds\MapDs\Set等结构中的键,或者其他任何查找此界面的结构。

警告

不要选择可能在对象内更改的值,例如公共属性。散列表查找将失败,因为散列已更改。

警告

所有相同的对象必须具有相同的散列值。

参数

该功能没有参数。

返回值

要用作此对象的哈希值的标量值。

例子

示例#1 Ds \ Hashable :: hash()示例

代码语言:javascript
复制
<?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;
    }
}
?>

← Ds\Hashable::equals

Sequence →

扫码关注腾讯云开发者

领取腾讯云代金券