的PHP documentation状态:为什么对象不允许作为关联数组中的键?
数组和对象不能被用作密钥。这样做会导致警告:非法偏移类型。
据我所知,PHP数组是有序的哈希地图。那么,为什么它本身被禁止使用对象作为键,是否有这个限制的原因?为什么不可能在类中实现散列函数以便将其用作关键字?
与此相关的,是有一个哈希地图,解决这个问题的一个PHP实现?
的PHP documentation状态:为什么对象不允许作为关联数组中的键?
数组和对象不能被用作密钥。这样做会导致警告:非法偏移类型。
据我所知,PHP数组是有序的哈希地图。那么,为什么它本身被禁止使用对象作为键,是否有这个限制的原因?为什么不可能在类中实现散列函数以便将其用作关键字?
与此相关的,是有一个哈希地图,解决这个问题的一个PHP实现?
见@duffymo的答案:在每一个实现他们的语言是真的。
请注意,有一个“变通办法”的种类,通过使用spl_object_hash
作为您的关键。这将返回一个字符串,该字符串是不可变的,可以用作键,并且对于占用该内存地址的任何对象都是相同的。 (阅读:spl_object_hash
将返回相同的值为同一实例,无论它被称为或如果对象已更改)
不幸的是,即使对象相同,“spl_object_hash”在每个脚本调用中都会返回不同的值。这会让人感觉不方便。 – Charles
那么,根据定义,它们并不相同。他们是不同的对象。你需要实现你自己的'equals'方法,或类似的东西。更好的问题:为什么你需要在哈希映射中进行交叉调用比较?为什么不找一种方法为这些对象创建唯一的标识符,并将它们保存在为此而设计的系统中? –
相关:[SplObjectStorage](http://php.net/class.splobjectstorage),可在5.3 。 – Charles
@Charles像一个魅力,thx! – rob