/** * 注册应用 */ public function registerProject($project, $dir, $prefix = '') { class_loader()->registerNamespace($project, $dir); $files = file_scan($dir . '/' . $project, "|(\\w+)/\\1.php\$|is", array('fullpath' => true, 'minDepth' => 2)); foreach ($files as $f) { list($module, ) = explode('.', $f['basename']); $r = new ReflectionClass("{$project}\\{$module}\\{$module}"); foreach ($r->getMethods() as $method => $m) { if (!empty($m['comments']['route'])) { $routes = $this->mergePathPrefix($m['comments']['route'], $prefix); route_register($routes, "{$project}\\{$module}\\{$module}::{$method}"); } } } }
public function getMethods($filter = null) { $methods = array(); $reflect = $filter ? parent::getMethods($filter) : parent::getMethods(); foreach ($reflect as $obj) { //Methods $methods[$obj->name] = array('type' => '', 'params' => array(), 'comments' => array()); if ($obj->isPrivate()) { $methods[$obj->name]['type'] = 'private'; } elseif ($obj->isProtected()) { $methods[$obj->name]['type'] = 'protected'; } elseif ($obj->isPublic()) { $methods[$obj->name]['type'] = 'public'; } //Parameters foreach ($obj->getParameters() as $p) { $pv = array('name' => $p->getName(), 'defaultValue' => $p->isDefaultValueAvailable() ? $p->getDefaultValue() : null, 'isOptional' => $p->isOptional()); $pv['valueType'] = strtolower(gettype($pv['defaultValue'])); $methods[$obj->name]['params'][] = $pv; } //Comments $methods[$obj->name]['comments'] = $this->parserComments($obj->getDocComment()); } return $methods; }