改變陣列我一直在使用__set魔術方法與保護性監視的變化,使我的班級知道他們是否有東西保存。有沒有辦法監視數組類型屬性的更改?我明白,通常你通過引用訪問數組,並且像array_push這樣的函數不會觸發__set方法,它們將使用對數組的引用。檢測在PHP
我要的是基本上是這樣:
class Skill{ public $Player, $Name, $Level;}
class Player {
protected $Name, /*Other properties*/, $Skills /*Array*/
}
我那麼就在所有的球員屬性的跟蹤來告訴我,如果持續性需求進行更新。 (技巧也會有這個功能,但是這個示例是基本的)。另外,我想迫使他們保持同步(這是一種雙向關係)。
有沒有辦法做到這一點,允許它表現得像一個數組(不要想通過製造類只是同步,如果這些我沒有)。
這看起來正是我想要的。稍後我會測試它的適用性。不知道ArrayObject。太棒了。我不得不改變這一點,並且會調用對象來改變跟蹤數組,併爲構造器提供一個字段名以保持同步(包括從數組中移除)。總之,這可以讓我做一個簡單的課程來充當我想要的98%的墊片。 (我一直希望沒有任何課,做數組是其中的一部分,但最好的解決方案並不總是適合你的原始模式的課程)。 – lassombra
很高興這可以幫助你,它從你當前的實現有點偏離,但事實上,根據定義,「ArrayObject實現IteratorAggregate,ArrayAccess,Serializable,Countable」意味着你可以像數組一樣使用對象(http://www.php。 net/manual/en/class.arrayaccess.php) –
請注意,PHP不會將'ArrayObject'(或'ArrayAccess'等)視爲一個數組。 'array_ *'方法會失敗,'+'操作符會失敗等。 – Tgr