listeners[] = $listener; } /** * @return Listener[] */ public function getListenerForEvent(GenericEvent $event): array { return arrayFilter( $this->listeners, static fn (Listener $l): bool => $l->eventClass === $event::class, ); } /** * @return Listener[] */ public function getSortedListenerForEvent(GenericEvent $event): array { $filtered = $this->getListenerForEvent($event); usort($filtered, static fn (Listener $a, Listener $b): int => $a->priority <=> $b->priority); return $filtered; } public function dispatch(GenericEvent $event): void { foreach ($this->getSortedListenerForEvent($event) as $listener) { if ($event->stopped === true) { return; } $this->invoker->call( [$listener->listenerClass, $listener->listenerMethod], [$event], ); } } }