Есть ли консенсус относительно того, как плагины должны быть реализованы в приложении PHP?
Я изучил шаблон наблюдателя , который очень близок, на самом деле это просто система уведомлений и не позволяет коду напрямую расширять приложение. В настоящее время я использую простую систему ловушек, которую придумал:
public function registerHook($hookName, array $params = array())
{
$this->hooks[] = $hookName;
foreach ( $this->plugins as $pluginName => $hooks ) {
if ( in_array($hookName, $hooks) ) {
$plugin = new $pluginName($this, $this->view, $this->controller);
$plugin->{$hookName}($params);
}
}
}
Это хорошо работает для моих целей, но мне любопытно, есть ли там шаблон проектирования, который был многократно протестирован и доказан, и я просто изобретая колесо.
Нет консенсуса, как в смысле «Серебряной пули». Для установленных шаблонов у вас есть несколько опций, таких как
и многие другие.
Что вы используете, зависит от вас, но вы должны убедиться, что архитектура вашей системы поддерживает модульность. Посмотрите на эти слайды, чтобы найти некоторые идеи
Взгляните на рамки Yii. Yii в значительной степени полагается на события, которые намного чище, чем хуки, действия и т. Д. Используя события, вы можете позволить различным частям системы общаться друг с другом объектно-ориентированным образом.
То, как вы это сделали, с помощью хуков - это то, как я это реализую.
Самая большая проблема с вашим образцом в том, что ваша функция создает плагин. Почему бы не передать экземпляр плагина вместо этого?
Как я это сделал, так это то, что плагин сначала создается и сам регистрирует свои хуки.