我正在了解spl_object_hash()
,并且不太了解这种情况下幕后的情况:
$obj = new stdClass;
$id1 = spl_object_hash($obj);
$id2 = spl_object_hash(new stdClass);
echo $id1.'<br>'.$id2;
Q1。为什么$id1 !== $id2
?
参考文献:
问:2这个陈述有什么关系吗?或者我错过了其他什么?当一个对象被销毁时,它的哈希可以重用于其他对象。
答案 0 :(得分:3)
spl_object_hash
做了什么?
[返回]一个字符串,该字符串对于每个当前存在的对象都是唯一的,并且对于每个对象始终是相同的。
澄清该语句:如果您有对象A,则每次散列对象A时,它将返回相同的散列值。如果你有对象A和对象B,即使两者的类型相同并且包含相同的值,它们的哈希值也会不同,因为它们不是同一个对象(实例)。
由于您有两个不同的对象,因此预期它们各自的ID不同。
答案 1 :(得分:2)
让我们一步一步检查您的代码。
(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:回应ids。
我认为混乱来自第三步。你制作了一个与第一个完全不同的新对象,尽管它是相同的类型(类)。并且spl_object_hash在&#34;对象级别&#34;上运行,这意味着它将为不同的对象返回不同的哈希值。