为什么对象不允许作为关联数组中的键?

时间:2012-12-10 01:57:17

标签: php hashmap associative-array

PHP documentation州:

  

数组和对象不能用作键。这样做会导致警告:非法偏移类型。

AFAIK,PHP数组是有序的哈希映射。那么,为什么它本身被禁止使用对象作为键,是否有这种限制的原因?为什么没有可能在类中实现哈希函数以将其用作键?

在相关的说明中,是否有一个解决此问题的哈希映射的PHP实现?

2 个答案:

答案 0 :(得分:3)

键需要是不可变的才能使它们起作用。如果你的对象是可变的,那么它们就不能成为密钥。在实现它们的每种语言中都是如此:Java,C#等。

答案 1 :(得分:2)

请参阅@duffymo获取答案。

请注意,使用spl_object_hash作为密钥,有一种“解决方法”。这将返回一个不可变的字符串,该字符串可用作键,并且对于占用该内存地址的任何对象都是相同的。 (读取:spl_object_hash将为同一个实例返回相同的值,无论它在何处被调用或者对象是否已更改)