getReflect($events[0]); if (!$reflect) { throw new Exception('Checks the class is c\'not instantiable.'); } $events[0] = $reflect->newInstance(); } $this->_events[$name] = $events; } /** * @return array */ public function getEvents(): array { return $this->_events; } /** * @param string $name * @return mixed */ public function getEvent(string $name): mixed { return $this->_events[$name] ?? null; } /** * @param $name * @param Closure|null $closure * @param array $params * @return mixed */ public function runEvent($name, ?Closure $closure, array $params): void { $event = $this->getEvent($name); if (empty($event)) { if (!is_callable($closure)) { return; } call_user_func($closure, ...$params); } else { call_user_func($event, ...$params); } } }