*/ private array $dispatchedEvents = []; public function dispatch(object $event): void { $this->dispatchedEvents[] = $event; } /** * @return array */ public function getDispatchedEvents(): array { return $this->dispatchedEvents; } public function clear(): void { $this->dispatchedEvents = []; } /** * @template T of object * * @param class-string $eventClass * * @return array */ public function getDispatchedEventsOfType(string $eventClass): array { return array_filter( $this->dispatchedEvents, fn (object $event) => $event instanceof $eventClass ); } }