とてもターゲットの狭い記事ですが、ほぼ自分用メモです。 たとえば、外部からセットされたDateTimeオブジェクトを内部的にUnixTimestampに変換して保持し、外部に返す際は再びDateTimeオブジェクトに変換して返すようなオブジェクト。 そのために、マジックメソッド経由で値を変換して受ける/返す機能を持つクラスやTraitを、ArrayAccessとマジックメソッドを使って作成するとします。 それだけなら問題起きないのですが、気を利かせて(?)Traversableを実装して foreach時にも上記の仕様通りに値を返したい場合。 内部的には $attributes みたいなプロパティに配列で保持するとして、IteratorAggregate を implements してgetIterator() で $attributes の ArrayIterator を返すような手抜き