2024 年 PHP Conference Japan

SplObjectStorage::getHash

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

SplObjectStorage::getHash 計算包含物件的唯一識別碼

說明

public SplObjectStorage::getHash(物件 $object): 字串

此方法會計算新增至 SplObjectStorage 物件的物件的識別碼。

SplObjectStorage 的實作會傳回與 spl_object_hash() 相同的值。

儲存物件永遠不會包含多個具有相同識別碼的物件。因此,它可以用來實現一個集合(一組唯一值),其中物件的唯一性由這個函式返回的唯一值決定。

參數

object

要計算其識別碼的物件。

返回值

一個包含計算出的識別碼的 字串

錯誤/例外

當返回值不是 字串 時,會拋出 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