Как работает система плагинов (WordPress, MyBB...)?

Мне интересно, как работают плагины, я просто знаю, что вместо изменения кода мы используем плагины, но как они выполняют свою работу без изменения кода? и что следует учитывать кодеру при кодировании нового проекта, чтобы в нем могли быть плагины? и большое спасибо:D

1 ответ

Решение

Существует множество вариантов реализации системы плагинов. Wordpress использует довольно распространенную схему, часто называемую "зацепками". Я не знаю точную реализацию, но в основном это работает так:

// plugin.php script registers its own callback function
register_plugin("hook_type", "plugin_function_123");

function plugin_function_123($params) { ... }

Где hook_type часто имя действия или что-то. И когда основное приложение проходит через определенную точку (или, например, нуждается в обработке некоторых данных), оно вызывает все зарегистрированные функции обратного вызова:

$output = call_plugins("hook_type", $param1, $param2);

Это часто реализуется за кулисами в виде простого цикла:

foreach ($registered_plugins[$action] as $func) {
    $func($param1, $param2, ...);   // or call_user_func_
}

Теперь это зависит от типа ловушки / действия, какие параметры присутствуют, и ожидается ли какой-либо текст результата. Существуют также различия в передаче параметров (например, для некоторых обратных вызовов требуются ссылки &$var). И некоторые системы плагинов вместо этого полагаются на объекты (если существует не так много различных типов действий или нужно работать с более сложными структурами).

Другие вопросы по тегам