我正在使用反射从方法中获取文档注释: http://www.php.net/manual/en/reflectionclass.getdoccomment.php,如下所示:
/**
* Method description
*
* @param array $foo Bla bla
* @return string More bla bla
*/
如何将此字符串解析为可以使用的字符串? 我需要从中提取“方法描述”文本。其他的东西对我来说并不重要,因为我可以使用其他反射方法来获取参数等。
答案 0 :(得分:2)
trim(str_replace(array('/', '*'), '', substr($rc->getDocComment(), 0, strpos($rc->getDocComment(), '@'))));
假设评论始终采用该格式。
答案 1 :(得分:1)
我没有太多解析注释的经验,但是,将其视为一个字符串,我要做的是:
这样的事情:
<?php
$string = " /**
* Method description
*
* @param array $foo Bla bla
* @return string More bla bla
*/";
$parts = explode("\n",$string);
$comment = trim($parts[1]," *");
echo $comment; // will echo "Method description"
然而,可能并不理想,因为描述可能在多行上。
答案 2 :(得分:0)
public function parseAnnotations($doc){
preg_match_all('/@([a-z]+?)\s+(.*?)\n/i', $doc, $annotations);
if(!isset($annotations[1]) OR count($annotations[1]) == 0){
return [];
}
return array_combine(array_map("trim",$annotations[1]), array_map("trim",$annotations[2]));
}
...
$reflection = new ReflectionObject($class);
foreach($reflection->getProperties() as $property){
print_r($this->parseAnnotations($property->getDocComment()));
}
示例
/**
* @param $action
* @required FALSE
*/
private $action;
结果
Array
(
[param] => $action
[required] => FALSE
)