From 5f386cd0d4702f5e7e6ac6562069552734f0d386 Mon Sep 17 00:00:00 2001 From: KHOUBZA Younes Date: Thu, 3 Dec 2020 10:11:36 +0100 Subject: [PATCH] add dispatcher priority --- src/Prime/Dispatcher/EventDispatcher.php | 26 +++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/Prime/Dispatcher/EventDispatcher.php b/src/Prime/Dispatcher/EventDispatcher.php index b9c4541b..f3d9960e 100644 --- a/src/Prime/Dispatcher/EventDispatcher.php +++ b/src/Prime/Dispatcher/EventDispatcher.php @@ -8,13 +8,14 @@ use Flasher\Prime\Dispatcher\Listener\ListenerInterface; final class EventDispatcher implements EventDispatcherInterface { private $listeners = array(); + private $sorted = array(); /** * @inheritDoc */ - public function addListener($eventName, ListenerInterface $listener) + public function addListener($eventName, ListenerInterface $listener, $priority = 0) { - $this->listeners[$eventName][] = $listener; + $this->listeners[$eventName][$priority][] = $listener; } /** @@ -42,7 +43,26 @@ final class EventDispatcher implements EventDispatcherInterface return array(); } - return $this->listeners[$eventName]; + if (!isset($this->sorted[$eventName])) { + $this->sortListeners($eventName); + } + + return $this->sorted[$eventName]; + } + + /** + * @param $eventName + */ + private function sortListeners($eventName) + { + krsort($this->listeners[$eventName]); + $this->sorted[$eventName] = array(); + + foreach ($this->listeners[$eventName] as $listeners) { + foreach ($listeners as $k => $listener) { + $this->sorted[$eventName][] = $listener; + } + } } /**