Архитектура плагина php

Я пытаюсь придумать способ создания архитектуры плагинов для моей собственной инфраструктуры. Я прочитал множество тем и опубликовал здесь и на других сайтах. И в основном я пришел к следующему решению, которое кажется единственным хорошим вариантом в PHP (в настоящее время).

Идея состоит в том, что каждый класс расширяет своего рода класс наблюдателя. Таким образом, класс Template, BaseController и т. Д. Всегда расширяют класс Plugin.

<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>

Так что здесь в основном происходит то, что когда indexController расширяет baseController, выполняется проверка плагинов. В этом случае для конструктора. Это может быть удобно, когда вы хотите выполнить какую-то проверку входа в систему с помощью плагина, прежде чем метод Action будет фактически вызван.

Класс Plugin может определить, из какого класса вызывается, и знает, какие функции нужно искать в загруженных плагинах.

Также обратите внимание, что он проверяет список загруженных плагинов 2 раза. Один перед чем-либо загружается (рано) в конструктор, и один, когда все переменные загружаются (поздно).

Я также могу добавить переменные в & quot; checkForLateHooks () & quot; функция. Таким образом, функции-ловушки также могут манипулировать ими, например, «baseLayout». переменная.

Функция ловушки будет выглядеть так:

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

Теперь, в основном, мой вопрос: хорош ли этот подход? Я знаю, что, вероятно, есть много других способов сделать это тоже. Но я в основном не хочу сталкиваться с проблемами дизайна позже. Сейчас это кажется хорошей идеей, но вы никогда не знаете, как все получится позже ...

Если я правильно помню (из всех постов, которые я прочитал), это похоже на то, как это делает WordPress (и некоторые другие фреймворки).

Ответы на вопрос(2)

Ваш ответ на вопрос