1: <?php declare(strict_types=1);
2:
3: namespace Salient\Contract\Core\Event;
4:
5: use Psr\EventDispatcher\ListenerProviderInterface as PsrListenerProviderInterface;
6:
7: /**
8: * @api
9: */
10: interface EventListenerProviderInterface extends PsrListenerProviderInterface
11: {
12: /**
13: * Register a listener for a given event or list of events
14: *
15: * @template TEvent of object
16: *
17: * @param callable(TEvent): mixed $listener
18: * @param string[]|string|null $event If `null`, the listener is registered
19: * for events accepted by its first parameter.
20: * @return int A listener ID accepted by {@see removeListener()}.
21: */
22: public function listen(callable $listener, $event = null): int;
23:
24: /**
25: * Deregister an event listener with a given listener ID
26: *
27: * @param int $id Returned by {@see listen()}.
28: */
29: public function removeListener(int $id): void;
30:
31: /**
32: * Get listeners registered for a given event
33: *
34: * @template TEvent of object
35: *
36: * @param TEvent $event
37: * @return iterable<callable(TEvent): mixed>
38: */
39: public function getListenersForEvent(object $event): iterable;
40: }
41: