SplObjectStorage::getHash

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

SplObjectStorage::getHash 计算包含对象的唯一标识符

描述

public SplObjectStorage::getHash(object $object): string

此方法计算添加到 SplObjectStorage 对象的对象的标识符。

中的实现 SplObjectStorage 返回与 spl_object_hash() 相同的值。

存储对象永远不会包含多个具有相同标识符的对象。因此,它可以用来实现一个集合(一个唯一值的集合),其中对象是否是唯一的由此函数返回的值是否唯一来确定。

参数

object

要计算其标识符的对象。

返回值

一个包含计算出的标识符的 string

错误/异常

当返回值不是 string 时,将抛出 RuntimeException

示例

示例 #1 SplObjectStorage::getHash() 示例

<?php
class OneSpecimenPerClassStorage extends SplObjectStorage {
public function
getHash($o) {
return
get_class($o);
}
}
class
A {}

$s = new OneSpecimenPerClassStorage;
$o1 = new stdClass;
$o2 = new stdClass;
$o3 = new A;

$s[$o1] = 1;
//$o2 被认为与 $o1 相等,因此该值被替换
$s[$o2] = 2;
$s[$o3] = 3;

//这些被认为与之前的对象相等
//因此它们可以用来访问在它们下面存储的值
$p1 = new stdClass;
$p2 = new A;
echo
$s[$p1], "\n";
echo
$s[$p2], "\n";
?>

上面的例子将输出类似于以下内容

2
3

参见

添加说明

用户贡献的说明 1 条说明

aron dot duby at gmail dot com
11 年前
这似乎也是在 contains() 函数中使用的函数,因此如果您要存储的所有对象都已具有唯一的 ID,则可以使用您自己的类覆盖此函数。

<?php
class UserStorage extends SPLObjectStorage{
public function
getHash($obj){
return
$obj->id;
}
}

$us = new UserStorage();
$user1 = new User(1);
$user2 = new User(2);

$us->attach($user1);
$us->attach($user2);

$me = new User(2);

// 以下内容通常会失败,因为它们是两个不同的对象
// 但现在它与我们扩展的 getHash() 一起工作了
$us->contains($me);

?>
To Top