eventName ?? get_class($this); } /** * Calls event handlers registered for this event. * * @throws \RuntimeException if event call recursion reaches the max depth limit */ public function call() : void{ if(self::$eventCallDepth >= self::MAX_EVENT_CALL_DEPTH){ //this exception will be caught by the parent event call if all else fails throw new \RuntimeException("Recursive event call detected (reached max depth of " . self::MAX_EVENT_CALL_DEPTH . " calls)"); } $timings = Timings::getEventTimings($this); $timings->startTiming(); $handlerList = HandlerListManager::global()->getListFor(get_class($this)); ++self::$eventCallDepth; try{ foreach(EventPriority::ALL as $priority){ $currentList = $handlerList; while($currentList !== null){ foreach($currentList->getListenersByPriority($priority) as $registration){ $registration->callEvent($this); } $currentList = $currentList->getParent(); } } }finally{ --self::$eventCallDepth; $timings->stopTiming(); } } }