No estoy completamente seguro de que ésta sea la solución a tu problema: preocúpate de devolver el objeto por referencia. (con el operador &)
Código PHP:
function &obtener_iterador() {
return new Iterador($this);
}
Y cuando la llames mantén la referencia:
Código PHP:
$iterador =& $this->modelo->obtener_iterador();
De la otra forma, el objeto $iterador no es el mismo que el que devuelves, sino una copia. Y eso a veces te lleva a comportamientos inesperados e indeterminados.
Sigue posteando por aquí. :)