Una arquitectura de plugin php

Estoy tratando de pensar en una manera de crear una arquitectura de plugin para mi propio marco. He leído numerosos temas y publicado aquí y en otros sitios. Y, básicamente, he llegado a la siguiente solución, que parece ser la única buena opción en PHP (actualmente).

La idea es que cada clase extienda un tipo de observador como clase. Por lo tanto, una clase de plantilla, un controlador de base, etc. siempre extienden una clase de complemento.

<code>class BaseController extends Plugin
{
    public function __construct()
    {
        // Plugin check, notify all loaded plugins
        $this->checkForEarlyHooks();

        // Init some standard stuff
        $this->view = new Template();
        $this->baseLayout = 'layout.html';

        $this->something = new Something();

        // Plugin check, notify all loaded plugins
        $this->checkForLateHooks();
    }
}
</code>

Entonces, lo que básicamente sucede aquí es que cuando un indexController extiende un control de base, se realiza una comprobación del complemento. En este caso para el constructor. Esto puede ser conveniente cuando desea realizar algún tipo de verificación de inicio de sesión con un complemento, antes de que se invoque un método de acción.

La clase de complemento puede resolver a partir de qué clase se llama y saber qué funciones buscar en los complementos cargados.

También tenga en cuenta que comprueba la lista de complementos cargados 2 veces. Uno antes de que se cargue algo (antes) en el constructor, y uno cuando todos los vars están cargados (tarde).

También puedo agregar variables a la función "checkForLateHooks ()". Así que las funciones de enlace pueden manipularlas también, como la variable 'baseLayout'.

Una función de gancho se vería así:

<code>public function hookConstruct ( &$baseLayout )
{
    $baseLayout = 'login.html';
}
</code>

Ahora, básicamente, mi pregunta es, ¿es este enfoque bueno? Sé que probablemente hay muchas otras formas de hacerlo también. Pero principalmente no quiero tener problemas de diseño más adelante. Parece una buena idea ahora, pero nunca se sabe cómo van las cosas después ...

Si lo recuerdo bien (de todos los mensajes que he leído), esto es algo así como lo hace WordPress (y algunos otros marcos).

Respuestas a la pregunta(2)

Su respuesta a la pregunta