hnwの日記

イテレータを介して見るPHPクラスの内部構造

PHPにはイテレータの仕組みがあります。イテレータクラスのインスタンスは、配列同様にforeach文でループを作ることができます。たとえば次の例を見てみましょう。

<?php
$iter = new SplQueue();
$iter[] = 1;
$iter[] = 2;
$iter[] = 3;
$sum = 0;
foreach ($iter as $v) {
    $sum += $v;
}
var_dump($sum); // int(6)


SplQueueというのはキューを実現するイテレータで、ArrayAccessも実装しているので配列のように要素を追加することができます。この場合、3つの要素を持っているのでイテレーションも3回になります。

SplQueueによるイテレーションをネストしてみる

ところで、同じイテレータをネストした場合どうなるでしょうか?次のようなコードを考えてみます。

続きを読む