public function dispatchEvent(Event $event) { $eventType = $event->type(); if (array_key_exists($eventType, $this->_listeners)) { /** @var Event */ $event = $event->cloneEvent(); $event->reset($this->getEventTarget()); $eventHandlers =& $this->_listeners[$eventType]; if (!$this->_sortings[$eventType]) { ksort($eventHandlers); $this->_sortings[$eventType] = true; } end($eventHandlers); do { $priority = key($eventHandlers); $priorityHandlers =& $eventHandlers[$priority]; foreach ($priorityHandlers as $handler) { if ($event->isPropagationStopped()) { return; } $handler->apply($event); } } while (prev($eventHandlers) !== false); return true; } return false; }