PHP Conference Japan 2024

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 条注释

7
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