objectをforeachするときのあれ。
Objectのforeach
基本的にはオブジェクトはforeach出来る。
通常Objectにforeachをかけると可視性の範囲でプロパティが舐められる。
つまり
インスタンス化したオブジェクトをforeach
: public プロパティがイテレート!!
クラス内部のオブジェクトコンテキストで$thisをforeach
: 内部定義の全プロパティ&継承されたpublic,protectedプロパティ
インターフェイスの実装
Iteratorインターフェイスを実装するとforeachの挙動をあれ出来る。でもこれ、実際問題面倒。
クラス内部に舐めたい配列が有るならIteratorAggregateインターフェイスの実装で足る。
class Item_Box implements \IteratorAggregate
{
public $container = [];
public function getIterator()
{
return new \ArrayObject($this->container);
}
}
IteratorAggregate
の実装はgetIterator
の実装のみでたる。ココで注意しないと行けないのは返り値。
getIteratorはイテレータブルな値をreturnしなければならないが、
単純に配列をreturnしても駄目。
なのでここに配列を返したい場合にはArrayObjectでラップする必要がある。
ほかほか
Generatorとかも気軽にforeachできるみたいだけど、その辺はまた後ほど(ローカルに5.5入ってない)