ArrayObjectこれにより、イテレータを実装IteratorAggregateする代わりに返すことができます。それはかなり簡単です。次のように、配列をラップするクラスがあるとします。
class Foo
{
private $array = [1,2,3,4];
}
foreachそして、次のように のインスタンスをオーバーしたいFoo:
foreach (new Foo as $bar) {
echo $bar; // outputs 1234
}
これを実現するには、インターフェイスを追加できIteratorますが、オブジェクト内の配列を反復処理するという単純なタスクのために、すべてのメソッドをインターフェイスに実装する必要がありました。その機能が必要なときはいつでも、そのコードを何度も複製したくはありません。特に、必要なことを行う Iterator が既に存在するためです。したがって、実装する代わりに実装しIteratorますIteratorAggregate
class Foo implements IteratorAggregate
{
private $array = [1,2,3,4];
public function getIterator()
{
return new ArrayIterator($this->array);
}
}
これで、 PHP はインスタンス自体の代わりにforeach返された Iterator を使用して、出力 1234 を取得できるようになります。getIteratorFoo
の場合、ポイントは単純にの値をオーバーArrayObjectできるようにするためです。もちろん、パブリックであるため、自分自身を呼び出して、返された Iterator を直接使用することもできます。foreachArrayObjectgetIterator
の ctor 署名にも注意してくださいArrayObject。
public __construct (
[ mixed $input
[, int $flags = 0
[, string $iterator_class = "ArrayIterator"
]]] )
どの Iterator が返されるかを示します。