diff --git a/src/Doctrine/aliases.php b/src/Doctrine/aliases.php index 35951e5..1a321ce 100644 --- a/src/Doctrine/aliases.php +++ b/src/Doctrine/aliases.php @@ -13,17 +13,17 @@ class EventArgs { } abstract class EventManager { - public function addEventSubscriber(EventSubscriber $subscriber) { + public function addEventSubscriber(EventSubscriber $subscriber): void { $this->addEventListener($subscriber->getSubscribedEvents(), $subscriber); } - public function removeEventSubscriber(EventSubscriber $subscriber) { + public function removeEventSubscriber(EventSubscriber $subscriber): void { $this->removeEventListener($subscriber->getSubscribedEvents(), $subscriber); } - abstract public function addEventListener($events, $listener); + abstract public function addEventListener(string|array $events, object $listener): void; - abstract public function removeEventListener($events, $listener = NULL); + abstract public function removeEventListener(string|array $events, object $listener = NULL): void; } interface EventSubscriber { diff --git a/src/Events/EventManager.php b/src/Events/EventManager.php index cd7be64..4496f0f 100644 --- a/src/Events/EventManager.php +++ b/src/Events/EventManager.php @@ -75,7 +75,7 @@ public function setExceptionHandler(IExceptionHandler $exceptionHandler) * @param string $eventName The name of the event to dispatch. The name of the event is the name of the method that is invoked on listeners. * @param \Doctrine\Common\EventArgs $eventArgs The event arguments to pass to the event handlers/listeners. If not supplied, the single empty EventArgs instance is used */ - public function dispatchEvent($eventName, DoctrineEventArgs $eventArgs = NULL) + public function dispatchEvent(string $eventName, ?DoctrineEventArgs $eventArgs = NULL): void { if ($this->panel) { $this->panel->eventDispatch($eventName, $eventArgs); @@ -118,7 +118,7 @@ public function dispatchEvent($eventName, DoctrineEventArgs $eventArgs = NULL) * @param string|null $eventName * @return \Doctrine\Common\EventSubscriber[]|callable[]|\Doctrine\Common\EventSubscriber[][]|callable[][] */ - public function getListeners($eventName = NULL) + public function getListeners(string $eventName = NULL): array { if ($eventName !== NULL) { if (!isset($this->sorted[$eventName])) { @@ -143,7 +143,7 @@ public function getListeners($eventName = NULL) * @param string|null $eventName * @return bool TRUE if the specified event has any listeners, FALSE otherwise. */ - public function hasListeners($eventName) + public function hasListeners(string $eventName): bool { return (bool) count($this->getListeners($eventName)); } @@ -156,7 +156,7 @@ public function hasListeners($eventName) * @param int $priority * @throws \Kdyby\Events\InvalidListenerException */ - public function addEventListener($events, $subscriber, $priority = 0) + public function addEventListener(string|array $events, object $subscriber, $priority = 0): void { foreach ((array) $events as $eventName) { [, $event] = Event::parseName($eventName); @@ -184,14 +184,8 @@ public function addEventListener($events, $subscriber, $priority = 0) * @param \Doctrine\Common\EventSubscriber|\Closure|array|string $unsubscribe * @param \Doctrine\Common\EventSubscriber|\Closure|array $subscriber */ - public function removeEventListener($unsubscribe, $subscriber = NULL) + public function removeEventListener(string|array $unsubscribe, object $subscriber = NULL): void { - if ($unsubscribe instanceof EventSubscriber) { - [$unsubscribe, $subscriber] = $this->extractSubscriber($unsubscribe); - } elseif ($unsubscribe instanceof Closure) { - [$unsubscribe, $subscriber] = $this->extractCallable($unsubscribe); - } - foreach ((array) $unsubscribe as $eventName) { $eventName = ltrim($eventName, '\\'); foreach ($this->listeners[$eventName] as $priority => $listeners) { @@ -272,7 +266,7 @@ protected function extractCallable(callable $subscriber) /** * {@inheritdoc} */ - public function addEventSubscriber(EventSubscriber $subscriber) + public function addEventSubscriber(EventSubscriber $subscriber): void { $hash = spl_object_hash($subscriber); if (isset($this->subscribers[$hash])) { @@ -303,9 +297,11 @@ public function addEventSubscriber(EventSubscriber $subscriber) /** * {@inheritdoc} */ - public function removeEventSubscriber(EventSubscriber $subscriber) + public function removeEventSubscriber(EventSubscriber $subscriber): void { - $this->removeEventListener($subscriber); + [$unsubscribe, $subscriber] = $this->extractSubscriber($subscriber); + + $this->removeEventListener($unsubscribe, $subscriber); } /** diff --git a/src/Events/LazyEventManager.php b/src/Events/LazyEventManager.php index e635c08..f106f08 100644 --- a/src/Events/LazyEventManager.php +++ b/src/Events/LazyEventManager.php @@ -50,7 +50,7 @@ public function setPanel(Panel $panel) /** * {@inheritdoc} */ - public function getListeners($eventName = NULL) + public function getListeners(string $eventName = NULL): array { if ($eventName === NULL) { while (($type = key($this->listenerIds)) !== NULL) { @@ -67,14 +67,8 @@ public function getListeners($eventName = NULL) /** * {@inheritdoc} */ - public function removeEventListener($unsubscribe, $subscriber = NULL) + public function removeEventListener(string|array $unsubscribe, object $subscriber = NULL): void { - if ($unsubscribe instanceof EventSubscriber) { - [$unsubscribe, $subscriber] = $this->extractSubscriber($unsubscribe); - } elseif ($unsubscribe instanceof Closure) { - [$unsubscribe, $subscriber] = $this->extractCallable($unsubscribe); - } - foreach ((array) $unsubscribe as $eventName) { if (array_key_exists($eventName, $this->listenerIds)) { $this->initializeListener($eventName); diff --git a/src/Events/NamespacedEventManager.php b/src/Events/NamespacedEventManager.php index fc94b05..5dff5c0 100644 --- a/src/Events/NamespacedEventManager.php +++ b/src/Events/NamespacedEventManager.php @@ -40,7 +40,7 @@ public function __construct($namespace, EventManager $eventManager) /** * {@inheritDoc} */ - public function dispatchEvent($eventName, DoctrineEventArgs $eventArgs = NULL) + public function dispatchEvent(string $eventName, ?DoctrineEventArgs $eventArgs = NULL): void { [$ns, $event] = Event::parseName($eventName); @@ -54,7 +54,7 @@ public function dispatchEvent($eventName, DoctrineEventArgs $eventArgs = NULL) /** * {@inheritDoc} */ - public function getListeners($eventName = NULL) + public function getListeners(string $eventName = null): array { if ($eventName === NULL) { $listeners = []; @@ -83,7 +83,7 @@ public function getListeners($eventName = NULL) /** * {@inheritDoc} */ - public function hasListeners($eventName) + public function hasListeners(string $eventName): bool { [$ns, $event] = Event::parseName($eventName); @@ -97,7 +97,7 @@ public function hasListeners($eventName) /** * {@inheritDoc} */ - public function addEventListener($events, $subscriber, $priority = 0) + public function addEventListener(string|array $events, object $subscriber, $priority = 0): void { foreach ((array) $events as $eventName) { [$ns, $event] = Event::parseName($eventName); @@ -108,30 +108,14 @@ public function addEventListener($events, $subscriber, $priority = 0) /** * {@inheritDoc} */ - public function removeEventListener($unsubscribe, $subscriber = NULL) + public function removeEventListener(string|array $unsubscribe, object $subscriber = NULL): void { - if ($unsubscribe instanceof EventSubscriber) { - $subscriber = $unsubscribe; - $unsubscribe = []; - - foreach ($subscriber->getSubscribedEvents() as $eventName => $params) { - if ((is_array($params) && is_array($params[0])) || !is_numeric($eventName)) { - // [EventName => [[method, priority], ...], ...] - // [EventName => [method, priority], ...] && [EventName => method, . - $unsubscribe[] = $eventName; - - } else { // [EventName, ...] - $unsubscribe[] = $params; - } - } - } - $unsubscribe = array_map(function ($eventName) { [$ns, $event] = Event::parseName($eventName); return $ns === NULL ? $this->namespace . $event : $eventName; }, (array) $unsubscribe); - $this->evm->removeEventListener($unsubscribe, $subscriber); + $this->evm->removeEventListener($unsubscribe, $subscriber); } /**