YiluPHP
这家伙很懒,什么都没有留下...

经验 PHP列出类的所有方法及注释信息

浏览数 193670
/**
* 生成元数据
*/
protected function makeMeta($api) {
$classReflection = new \ReflectionClass($api);
$methods = $classReflection->getMethods(\ReflectionMethod::IS_PUBLIC);
$method = array();
foreach($methods as $methodReflection) {
$doc = $methodReflection->getDocComment();
$properties = $this->extractProperties($doc);
if(!isset($properties['uri'])) {
continue;
}
$method[$properties['uri']] = $properties;

}
return $method;
}

/**
* 解析注释信息
* @param $doc
* @return array
*/
protected function extractProperties($doc) {
$properties = [];
$matches = [];
if(preg_match_all('/@([a-zA-Z]+)\b([^@]+)/u', $doc, $matches)) {
for($index = 0; $index < count($matches[0]); $index++) {
$propertyName = $matches[1][$index];
if($propertyName == 'param') {
$properties[$propertyName][] = $this->extractParamInfo(str_replace('*', '' ,trim($matches[2][$index])));
} else {
$properties[$propertyName] = trim(str_replace('*', '', trim($matches[2][$index])));
$properties[$propertyName] = nl2br($properties[$propertyName]);
}
}
}
return $properties;
}

/**
* 解析请求参数详细情况
* @param $params
* @return array
*/
protected function extractParamInfo($params) {
if(empty($params)) {
return [];
}

$param = [
'type' => 'unknown',
'name' => 'unknown',
'default' => null,
'brief' => '未填写',
'detail' => ''
];
$part = explode(' ', trim($params));
!empty($part[0]) && $param['type'] = $part[0];
!empty($part[1]) && $param['name'] = $part[1];
!empty($part[2]) && $param['brief'] = $part[2];
!empty($part[3]) && $param['detail'] = nl2br(implode(' ', array_slice($part, 3)));
if(strpos($param['name'], '=')) {
list($param['name'], $param['default']) = explode('=', $param['name']);
}
return $param;
}
我来说说