注释解析

This commit is contained in:
IT小强xqitw.cn 2018-06-05 11:14:41 +08:00
parent 10891a2709
commit efc9ac8365

87
src/lib/ParseComment.php Normal file
View File

@ -0,0 +1,87 @@
<?php
/**
* ==================================================================
* : ParseComment.php
* : 注释解析
* : IT小强
* 创建时间: 2018/6/5 10:38
* 修改时间:
* copyright (c) 2016 - 2018 mail@xqitw.cn
* ==================================================================
*/
namespace itxq\apidoc\lib;
/**
* 注释解析
* Class ParseComment
* @package itxq\apidoc\lib
*/
class ParseComment
{
/**
* @var array - 注释解析后的数组
*/
protected $commentParams = [];
/**
* 将注释按行解析并以数组格式返回
* @param $comment - 原始注释字符串
* @return bool|array
*/
public function parseCommentToArray($comment) {
$comments = [];
if (empty($comment)) {
return $comments;
}
// 获取注释
if (preg_match('#^/\*\*(.*)\*/#s', $comment, $matches) === false) {
return $comments;
}
$matches = trim($matches[1]);
// 按行分割注释
if (preg_match_all('#^\s*\*(.*)#m', $matches, $lines) === false) {
return $comments;
}
$comments = $lines[1];
// 去除无用的注释
foreach ($comments as $k => $v) {
$comments[$k] = $v = trim($v);
if (strpos($v, '@') !== 0) {
continue;
}
$_parse = $this->_parseCommentLine($v);
if (!$_parse) {
continue;
}
$_type = $_parse['type'];
$_content = isset($_parse['content']) ? $_parse['content'] : '';
if ($_type === 'param') {
if (!isset($this->commentParams[$_type])) {
$this->commentParams[$_type] = [];
}
unset($_parse['type']);
$this->commentParams[$_type][] = $_parse;
} else {
$this->commentParams[$_type] = $_content;
}
}
return $this->commentParams;
}
/**
* 解析注释中的参数
* @param $line - 注释行
* @return bool|array - 解析后的数组解析失败返回false
*/
private function _parseCommentLine($line) {
$line = explode(' ', $line);
$line[0] = substr($line[0], 1);
$class = new ParseLine();
$action = 'parseLine' . $class->underlineToHump($line[0]);
if (!method_exists($class, $action)) {
$action = 'parseLineTitle';
}
return $class->$action($line);
}
}