Extendiendo un iterador sobrecargar valid()
no es un buen enfoque porque está agregando funcionalidad en válido() que no pertenece allí. Un enfoque algo más limpio sería utilizar:
class BeforeAndAfterIterator extends RecursiveIteratorIterator
{
public function beginIteration()
{
echo 'begin';
}
public function endIteration()
{
echo 'end';
}
}
y luego hacer
$it = new BeforeAndAfterIterator(new RecursiveArrayIterator(range(1,10)));
foreach($it as $k => $v) {
echo "$k => $v";
}
la que luego daría
begin0 => 11 => 22 => 33 => 44 => 55 => 66 => 77 => 88 => 99 => 10end
Esos dos métodos están bien a la sobrecarga ya que son específicamente para ese propósito y no tienen un comportamiento predefinido (tenga en cuenta que no estoy llamando al método principal).
mientras eso funciona, está sucio hacerlo porque el método válido tiene efectos secundarios ahora. Ver mi respuesta para un enfoque más limpio. – Gordon
@Gordon Estás en lo correcto. OP debe elegir el método que ha mostrado. – Yoshi