的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