public function addListener(Listener $callback) { $type = $callback->getType(); $id = $callback->getId(); if (!isset($this->listeners[$type])) { $this->listeners[$type] = ['id' => [], 'global' => []]; } if ($id) { if (!isset($this->listeners[$type]['id'][$id])) { $this->listeners[$type]['id'][$id] = []; } $this->listeners[$type]['id'][$id][] = $callback; } else { $this->listeners[$type]['global'][] = $callback; } }