Вы можете сделать так, как предлагает ircmaxell: добавить хуки.Но ясно, что информации, которую он дал, было недостаточно для вас.
Если вам нравится учиться на собственном примере, вы можете взглянуть на CMS Drupal, который не является ООП, но использует шаблон наблюдателя, называемый hooks повсюду, чтобы обеспечить модульную конструкцию.
Хук работает следующим образом:
- кусок php ищет существование специально названной функции.
- Если это существует, вызвать его и использовать его вывод (или ничего не делать с ним)
Например:
- Непосредственно перед сохранением статьив Drupal система article вызывает hook_insert
- Каждый модуль, имеющий функцию с именем ModuleName_insert, будет видеть, что эта функция вызывается.Пример: pirate.module может иметь функцию pirate_insert ().Система article делает обход по всем модулям и проверяет, существует ли ModuleName_insert.Он пройдет мимо пиратского модуля и найдет pirate_insert ().Затем он вызовет эту функцию (и передаст некоторые аргументы).Таким образом, позволяя модулю pirate.module изменять статью непосредственно перед диссертацией (или запускать некоторые действия, такие как превращение основного текста в пиратскую речь).
Волшебство происходит в так называемых user_callbacks, Пример :
$hook = 'insert'
foreach (module_implements($hook) as $module) {
$function = $module .'_'. $hook;
$result = call_user_func_array($function, $args);
}
И функция module_implements
может выглядеть примерно так:
$list = module_list(FALSE, TRUE, $sort); //looks for files that are considered "modules" or "addons".
foreach ($list as $module) {
if (function_exists($module.'_'.$hook)) { //see if the module has the hook 'registered'
$implementations[$hook][] = $module; //if so: add it to a list with functions to be called.
}
}