Я просто играю с php, чтобы создать архитектуру плагина. для этого я использую шаблон прослушивателя событий (посредника), в котором код может прослушивать / запускать событие.
Мой настоящий вопрос в том, как сделать объект слушателя доступным через приложение ». Единственные решения, о которых я могу думать прямо сейчас, - это создание основного класса слушателя / наблюдателя singleteon, чтобы любой код из любого места мог зарегистрировать слушателя.
$listener = Plugin::getInstance();
$listener->addEventListener('savePost', ....);
и для стрельбы я могу использовать тот же процесс.
OR
сделать статическим только зарегистрированный массив событий, например
private static $registeredEvents = array();
public function addEventListener($eventName, Closure $c){
self::$registeredEvents[$eventName] = $c;
}
Если я сделаю это, независимо от того, как объект плагина / слушателя предоставляется любому клиентскому коду, будет использоваться один и тот же контейнер ($ registerEvents).
В противном случае предоставление новых экземпляров класса слушателя другим объектам приводит к рассредоточению зарегистрированных событий. Поэтому при запуске определенных событий из системы я не могу перебирать все зарегистрированные события из разных экземпляров.
Так что, пожалуйста, покажите мне более эффективный способ сделать это.