Как работает система плагинов (WordPress, MyBB ...)? - PullRequest
14 голосов
/ 26 февраля 2011

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

1 Ответ

19 голосов
/ 26 февраля 2011

Существует множество вариантов реализации системы плагинов. 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). И некоторые системы плагинов вместо этого полагаются на объекты (если существует не так много различных типов действий или нужно работать с более сложными структурами).

...