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 为不同的对象提供不同的哈希值。
我正在了解 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 为不同的对象提供不同的哈希值。