Расширение итератора для перегрузки valid()
не очень хороший подход, потому что вы добавляете функциональность в valid (), который там не принадлежит. Несколько более чистым подходом было бы использовать:
class BeforeAndAfterIterator extends RecursiveIteratorIterator
{
public function beginIteration()
{
echo 'begin';
}
public function endIteration()
{
echo 'end';
}
}
, а затем сделать
$it = new BeforeAndAfterIterator(new RecursiveArrayIterator(range(1,10)));
foreach($it as $k => $v) {
echo "$k => $v";
}
, который тогда дал бы
begin0 => 11 => 22 => 33 => 44 => 55 => 66 => 77 => 88 => 99 => 10end
Эти два метода допустимы для перегрузки, поскольку они специально предназначены для этой цели и не имеют предопределенного поведения (учтите, что я не вызываю родительский метод).