spl_object_hash() return 个不同的 ID

spl_object_hash() return different ids

我正在了解 spl_object_hash(),不太了解这种情况的幕后情况:

$obj = new stdClass;
$id1 = spl_object_hash($obj);
$id2 = spl_object_hash(new stdClass);
echo $id1.'<br>'.$id2;

Q1。为什么 $id1 !== $id2

在参考文献中:

When an object is destroyed, its hash may be reused for other objects.

Q.2 是否有与该声明相关的内容?还是我漏掉了什么?

spl_object_hash 是做什么的?

[Returns a] string that is unique for each currently existing object and is always the same for each object.

澄清一下:如果您有对象 A,每次对对象 A 进行哈希运算时,它都会 return 相同的哈希值。如果您有对象 A 和对象 B,即使它们属于同一类型并且包含相同的值,它们的哈希值也会不同,因为它们不是同一个对象(实例)。

由于您有两个不同的对象,因此它们各自的 ID 应该不同。

让我们逐步检查您的代码。

(1) $obj = new stdClass;
(2) $id1 = spl_object_hash($obj);
(3) $id2 = spl_object_hash(new stdClass);
(4) echo $id1.'<br>'.$id2;

1:创建一个新的stdClass对象

2:获取此对象的哈希。

3:获取另一个 (完全不同的)stdClass 对象的散列

4:回显id。

我相信困惑来自第三步。你创建了一个新对象,它与第一个对象完全不同,尽管它是同一类型 (class)。 spl_object_hash 对 "object level" 进行操作,这意味着它将 return 为不同的对象提供不同的哈希值。