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 を取得できるようになります。getIterator
Foo
の場合、ポイントは単純にの値をオーバーArrayObject
できるようにするためです。もちろん、パブリックであるため、自分自身を呼び出して、返された Iterator を直接使用することもできます。foreach
ArrayObject
getIterator
の ctor 署名にも注意してくださいArrayObject
。
public __construct (
[ mixed $input
[, int $flags = 0
[, string $iterator_class = "ArrayIterator"
]]] )
どの Iterator が返されるかを示します。