spl_object_hash() 返回不同的 id

Min*_*Tri 1 php spl hashcode

spl_object_hash()在这种情况下,我正在了解并且不太了解幕后的内容:

$obj = new stdClass;
$id1 = spl_object_hash($obj);
$id2 = spl_object_hash(new stdClass);
echo $id1.'<br>'.$id2;
Run Code Online (Sandbox Code Playgroud)

一季度。为什么$id1 !== $id2

在参考资料中:

当一个对象被销毁时,它的散列值可能会被其他对象重用。

Q.2 是否有与该声明相关的内容?还是我错过了其他东西?

dec*_*eze 7

有什么作用spl_object_hash

[返回一个] 字符串,该字符串对于每个当前存在的对象都是唯一的,并且对于每个对象始终相同。

澄清该声明:如果您有对象 A,则每次散列对象 A 时,它都会返回相同的散列值。如果您有对象 A 和对象 B,即使两者的类型相同并包含相同的值,它们的哈希值也会不同,因为它们不是同一个对象(实例)。

由于您有两个不同的对象,因此预计它们各自的 ID 会有所不同。

  • 添加 re:Q1 中的引用 - 如果您在实例化 `stdClass` 的第二个实例之前销毁了 `$id1`,那么再次使用相同哈希的可能性很小。 (2认同)