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

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

Ответы

Ответ 1

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

// plugin.PHP скрипт 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_
}

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