Ядро Buga
Самая суть системы
Если вы разобрались с механизмом хуков, знаете и понимаете как функционирует эта кухня, то понять принцип работы ядра Buga, для вас труда не составит потому , что никакого ядра на самом деле нет.
Механизм хуков и есть ядро системы.
А как же точка входа ? Где этапы выполнения скрипта к чему цеплять и от чего стартовать хуки ?? Спокойствие, давайте для начала составим самый общий план работы скрипта в виде массива php:
$steps = [
'init', // начальная стадия установка настроек сайта
'request', // разбор url запроса от пользователя
'work', // работа основной алгоритм
'end' // конец
];
Вот этот массив и есть наши начальные хуки которые мы запустим на выполнение в цикле, мы назовем этот массив шагами steps.
И еще разок для понимания: берем масcив шагов steps и запускаем в работу первый шаг init - это есть самый обычный хук (для нас точка входа). Выполняем хук init :
doHook('init', $args);
Потом переходим к следующему шагу request - запускаем в обработку этот хук ну и так далее до самого конца - end. Таким образом у нас вся CMS это сплошные хуки и хукфункции которые цепляться к ним. Хукфункции - буду использовать этот термин для обазначение функции которая цепляется к хуку, чтобы не путаться в дальнейшем с хуком.
Так вот в хукфункция могут запускаться другие хуки , а в этих хуках есть свои хукфункции в которых также могут быть хуки и так далее и тп. Глубина погружения у нас будет ограничена 32-мя уровнями, это так на всякий случай, чтобы не зависло все.
Масcив steps в процессе выполнения скрипта может дополнятся другими шагами. Возьмем шаг request - здесь мы производим разбор url. Что пользователь хочет получить от сайта какую категорию, пост или страницу? Далее, в зависимости от запроса, в массив steps добавляются новые шаги. Здесь на сайте, внизу страницы, последовательность степов всегда отображается вот так:
init ⇒ request ⇒ work ⇒ post ⇒ atom ⇒ index ⇒ html ⇒ end
Походите по сайту вы увидите как меняется эта строка.
Код хуков и степов собран в классе Dispatcher расположение core/Dispatcher.php .