Amigo, no te ofendas, pero me parece que si he entendido tu código, el problema es que tu no has entendido mi crítica (que por ser crítica no quiere decir que sea atacando).
Hacer esto:
function dir_action($path) {
$this->scandir($path, true);
}
No es ser ordenado, ni hacerlo porque es tu forma de hacer las cosas. Para mi punto de vista eso son líneas inútiles, no tienen ninguna utilidad. Simplemente es como llamar a la función scandir con otro nombre, es decir, llamarla de dos formas, scandir y dir_action, pero ambas hacen la misma cosa.
La función file_action es aún mas inútil, ni siquiera hace nada, simplemente está declarada y ni recibe parámetros ni tampoco devuelve ninguna información. Debo suponer por tanto que esa función está para que la implemente alguien, pero te digo que eso no tiene utilidad, si alguien quiere implementar algo lo hará fuera de tu clase. La clase no tiene por qué tocarse si no es para actualizarse o modificarse directamente.
Según entiendo por tu código, se supone que la función file_action y dir_action debe implementarla el programador que use la clase, para que haga una u otra cosa sobre los archivos o bien sobre los directorios. ¿Entonces que utilidad tiene la clase, si tengo que implementar yo lo que hará y lo que dejará de hacer?
No se si consigo explicarme. No es que no entienda tu clase o que no tenga utilidad, quizás ahí me he explicado mal, pero lo cierto es que tiene una utilidad muy limitada. El problema de la clase no es de código, ni de sintaxis ni de falta de conocimientos, el problema es que está mal planteada. En lugar de declarar una clase con todos sus métodos correctamente definidos y delimitados, has hecho una ensalada de diferentes códigos para que alguien la modifique según para que la vaya a utilizar y demás, pero bajo mi punto de vista ese no es el objetivo que se persigue al crear una clase.
Para nombrar algo, uno de los principios de la POO es que el código se convierte en reutilizable y por lo tanto se puede utilizar en muchas aplicaciones, pero si te das cuenta ese principio no aparece en tu código. En tu clase habrás de modificar los métodos según los utilices para una u otra cosa, por lo tanto pierde completamente ese principio de "reciclar código".
En fin, respecto a la sintaxis, la programación y la imaginación muy bien, pero te faltan esos conocimientos teóricos que bajo mi punto de vista han hecho que la clase que has creado pierda su esencia. Puede ser útil, vale, pero no creo que cumpla los objetivos que se persiguen al crear una clase. Te recomiendo leer algo sobre la teoría de la programación orientada a objetos, modelos para construirla y las mejores formas de plantear los problemas y las soluciones.
Espero que no te tomes mal mi mensaje, solo trato de ayudarte a mejorar,
Saludos!