$arrayIter = new ArrayIterator( array(1, 2) );
$iterIter = new IteratorIterator($arrayIter);
var_dump($iterIter->valid()); //false
var_dump($arrayIter->valid()); //true
最初に$iterIter->rewind()を呼び出すと、$iterIter->valid()は true になります。rewind() を呼び出す必要がある理由が気になります。それには正当な理由があると思いますが、内部イテレータの状態が何であれ、単純に反復を開始し、反復を開始する前に巻き戻すオプションとしてそのままにしておくことを期待していました。
next() を呼び出すと、それが「有効な」状態になるようにも見えます (ただし、以前は最初の位置にあったことを示唆して、次の位置に進みます)。
$arrayIter = new ArrayIterator(array(1,2));
$iterIter = new IteratorIterator($arrayIter);
$iterIter->next();
var_dump($iterIter->valid());
繰り返しますが、内部イテレータが有効な状態にあるにもかかわらず、rewind() を呼び出す必要があるのはなぜでしょうか。