Каков наилучший способ интеграции диспетчера событий в библиотеку PHP?

Мне нужно интегрировать диспетчер событий в мою собственную кодовую базу (пользовательскую библиотеку PHP), поэтому я посмотрел, что оба в Symfony2 и Zend Framework 2 делаете.

очевидно, что нет общего интерфейса для диспетчеризации событий, потому что обе платформы имеют разные потребности и решили реализовать свой собственный код... поэтому я немного потерян: я не хочу изобретать свое личное колесо.

вероятно, интерфейсы SPL для реализации наблюдателя шаблон немного наивен, поэтому я здесь спрашиваю вас: что бы вы сделали?

редактировать

Так как это не ясно... Я хочу повторно использовать существующий ED, позволяя разработчику внедрить его в мою библиотеку.

предположим, вы разрабатываете lib с диспетчером, и вы знаете, что ваш lib будет частью пакета Symfony, а также повторно использоваться в проектах ZF: вы наверняка хотите повторно использовать Symfony и ZF диспетчеров, а не свои собственные.

Я искал общие интерфейсы для существующих диспетчеров, реализованных в основных библиотеках, но похоже, что решения нет.

4 ответов


вы можете определить интерфейс для своих нужд, а затем реализовать его с адаптерами differents для каждой платформы.


Я думаю, что ваш первый инстинкт выбрать один из широко используемых компонентов-это путь.

эти два варианта я бы тоже рассматривал. Вы должны просто взглянуть на них и выбрать тот, который вы чувствуете, будет работать лучше для вас.

бесстыдная вилка: если вы хотите что-то действительно, действительно легкий, вы можете взглянуть на Événement.


вам нужно реализовать шаблон наблюдателя, реализуя PHP-интерфейс SplObserver, SplSubject. Не только Zend , Symphony делает это для поддержки крючков, но, как правило, каждый диспетчер событий работает таким образом, реализуя шаблон наблюдателя .

вот статья, чтобы узнать больше http://devzone.zend.com/article/4284


старый пост, который уже был принят, но есть решение для падения решения EDP в PHP для тех, кто сталкивается с этим, как и я.

http://prggmr.org

функциональность сильно отличается от реализации Symfony и Zend, поскольку их интерфейс или классы не нуждаются в расширении для использования библиотеки, а вы просто вызываете типичные функции php для обработки диспетчеризации событий.

// Subscribe to dispatched events
subscribe(callback, signal)

// Dispatch an event
fire(signal)