Лучший способ разрешить плагины для PHP-приложения

Я начинаю новый веб-приложение на PHP и на этот раз я хочу создать что-то, что люди могут продлить с помощью интерфейса плагина. Как же можно идти о написании "крючков" в свой код так, что плагины могут прикрепить к конкретным событиям?

Я начинаю новый веб-приложение на PHP и на этот раз я хочу создать что-то, что люди могут продлить с помощью интерфейса плагина. Как же можно идти о написании "крючков" в свой код так, что плагины могут прикрепить к конкретным событиям?

Можно использовать шаблон Observer. Простой функциональный способ сделать это:


Так скажем, вы не хотите, чтобы шаблон Observer, потому что это требует, чтобы вы изменить ваши методы класса для решения задачи прослушивания, и хочется чего-то универсального. И допустим, вы не хотите использовать 
```
extends
```
 наследство, потому что вы, возможно, уже унаследовав в своем классе из другого класса. Разве не было бы здорово иметь универсальный способ сделать любой класс, подключаемых без особых усилий? Вот как:


Крючок и метод слушателя-это наиболее часто используемый, но есть и другие вещи, которые вы можете сделать. В зависимости от размера вашего приложения, и кому позволит увидеть код (это будет сценарий Фосс, или что-то в доме) будет в значительной степени влиять на то, как вы хотите разрешить Плагины. kdeloach есть хороший пример, но его реализация и функции крюк немного небезопасно. Я попросил бы вас, чтобы дать больше информации о характер-приложение на PHP писать, и как вы видите плагинов в сторона. 1 к kdeloach от меня.

Вот это подход я использовал, это попытка скопировать с Qt механизм сигналов/слотов, своего рода шаблон Observer.
Объекты могут излучать сигналы.
Каждый сигнал имеет свой идентификатор в системе - она состоит из идентификатора отправителя имя объекта
Каждый сигнал может быть привязано к приемникам, которые просто "отзывной"
Вы используете автобус класса, чтобы передать сигналы для всех, кто заинтересован в получении их
Когда что-то случается, вы "посылаете" сигнал.
Ниже приводится пример реализации


Я думаю, проще всего будет последовать собственному совету Джеффа и взглянуть вокруг существующего кода. Попробуйте посмотреть на Вордпресс, Друпал, Joomla и других известных на основе PHP и CMS, чтобы посмотреть, как их API крючки выглядеть и чувствовать себя. Таким образом, вы даже можете получить идеи, которые вы, возможно, не думали раньше, чтобы сделать вещи немного более активных обменов по линии. Более прямой ответ будет писать общие файлы, что они "include\_once" в свой файл, что бы обеспечить удобство пользования им потребуется. Это было бы разбить на категории, а не в один большой файл "hooks.php". Будьте осторожны, потому что то, что заканчивается происходит то, что файлы, которые они включают в конечном итоге, все больше и больше зависимостей и функциональность улучшается. Стараемся держать низкие зависимостей от API. Т. е. меньшее количество файлов для их включения.

Есть аккуратные проект под названием Колюшка исполнителя Matt Zandstra на Yahoo, который обрабатывает большую часть работы по обработке плагинов на PHP. Он реализует интерфейс класса плагина, поддерживает интерфейс командной строки и не слишком трудно, чтобы встать и работает - особенно если вы читали легенду о нем в журнале РНР архитектор.

Хороший совет, это посмотреть, как другие проекты сделали это. Многие называют за то, что установленные плагины и их "имя", зарегистрированных для услуги (такие как WordPress делает) так что у вас есть "точки" в ваш код, где вы вызываете функцию, которая определяет зарегистрированным слушателям и выполняет их. Стандартный дизайн ОО скороговорка-это шаблон наблюдателя, который будет хорошим вариантом для внедрения в по-настоящему объектно-ориентированной системы на PHP. В Zend Framework делает использование многих зацепив методов, и очень хорошо спроектирована. Это будет хорошая система, чтобы смотреть на.

Меня удивляет, что большинство ответов здесь, кажется, быть направлены о плагинах, которые являются локальными по отношению к веб-приложению, то есть плагины, которые работают на локальном веб-сервере. Что если вы хотели плагинов для запуска на другом - удаленном - сервере? Лучший способ сделать это было бы обеспечить такой форме, которая позволяет определять различные URL-адреса, которые будут вызываться при наступлении конкретного события в вашем приложении. Различные мероприятия будут отправлять различную информацию, основанные на событиях, которые только произошли. Таким образом, вы бы просто выполнить завиток вызова по URL-адресу, которая была предоставлена в ваше приложение (например, через https), где удаленные серверы могут выполнять задания на основе информацию, которая была отправлена на вашу заявку. Это дает два преимущества: Вам не нужно размещать никаких кодов на свой локальный сервер (безопасность) Код может быть на удаленных серверах (расширения) в разных языках, то PHP (переносимость)