Claro, de que es permitido es permitido, el problema es que al volver a llamar al método se re-define la función y causa error, ejemplo:
Código PHP:
Ver originalfunction foo() {
function bar() {
echo 'bar';
}
bar();
}
foo(); // bien, imprime 'bar'
foo(); // error, bar ya fue definida antes
Para repetir estructuras tienes que usar un while(), no funciones, y sí, lo ideal es que sean métodos de la misma clase.
También puedes usar los nuevos
traits para poder "compartir" código que sea re-usable entre diferentes clases pero que no tengan un contexto específico de la clase.
Saludos.