public function fireEvent($event, $source, $data = [])
{
foreach ($this->_peeks as $handler) {
if ($handler instanceof \Closure) {
$handler($source, $data, $event);
} else {
$handler[0]->{$handler[1]}($source, $data, $event);
}
}
if (!isset($this->_events[$event])) {
return null;
}
$ret = null;
/** @noinspection ForeachSourceInspection */
foreach ($this->_events[$event] as $i => $handler) {
if ($handler instanceof \Closure) {
$ret = $handler($source, $data, $event);
} else {
$ret = $handler[0]->{$handler[1]}($source, $data, $event);
}
if ($ret === false && $i !== count($this->_events[$event]) - 1) {
throw new ManagerException('`:event` event is canceled too early', ['event' => $event]);
}
}
return $ret;
}