public static function fire($name, &$obj = null) { /** * Уникальность очереди событий определяется именем события содержащей имя класса события. * Все подписки хранятся в классе и объект не меняется **/ $fire = Event::createFire($name, $obj); $list =& $fire['list']; $data =& $fire['data']; /** * TODO: Реализация is isshow... нужно сбрасывать события **/ if (isset($list['result'][$fire['objid']]) && !is_null($list['result'][$fire['objid']])) { return $list['result'][$fire['objid']]; } if (isset($data['executed']) && $data['executed'] === false) { return true; } //Защита от рекурсий вложенный вызов вернёт true $data['executed'] = false; if (!isset($list['readykeys'][$fire['objid']])) { $list['readykeys'][$fire['objid']] = array(); } if (!isset($list['readyobj'][$fire['objid']])) { $list['readyobj'][$fire['objid']] = array(); } // TODO: проверить обработку несуществующих ключей for ($i = 0, $l = sizeof($list['list']); $i < $l; $i++) { //Подписка на ходу Event::keystik($list['list'][$i]); } $r = Event::execute($fire, $list); if (Event::is($r)) { $r = true; } else { $r = false; } $list['result'][$fire['objid']] = $r; $data['executed'] = true; return $list['result'][$fire['objid']]; }