public static function createContext($name, &$obj, $key = '') { $p = explode(':', $key, 2); $key = $p[0]; if (sizeof($p) == 2) { $keys = explode(',', $p[1]); } else { $keys = array(); } $p = explode('.', $name); if (sizeof($p) > 1) { $class = $p[0]; } else { $class = ''; if ($obj) { throw new \Exception('Для события с объектом класс обязателен'); } } if ($class) { //одноимённый с классом ключ есть всегда. //Вроде того что у класса есть свои собственные обработчики котоорые должны сработать первыми. //Если в качестве ключе указать название класса этот обработчик всегда будет первым $keys[] = $class; } if ($class == 'Controller') { $class = 'Infrajs'; $p[0] = $class; $name = implode('.', $p); } else { if ($class == 'Layer') { $class = 'layer'; $p[0] = $class; $name = implode('.', $p); } } $classes = static::$classes; if ($obj) { if (empty($classes[$class])) { throw new \Exception('Функция класса объекта ' . $class . ' не указанна пример Event::$classes["' . $class . '"] = function($obj) { return $obj["id"] }'); } else { $objid = $classes[$class]($obj); } } else { $objid = ''; } $list =& Event::getList($name); $list['class'] = $class; $context = array('key' => $key, 'executed' => array(), 'name' => $name, 'class' => $class, 'keys' => $keys, 'obj' => &$obj, 'objid' => $objid, 'list' => &$list); if (empty($list['data'][$context['objid']])) { $list['data'][$context['objid']] = array(); } return $context; }