如何解析文档注释

时间:2012-07-12 22:42:24

标签: php string reflection comments

我正在使用反射从方法中获取文档注释: http://www.php.net/manual/en/reflectionclass.getdoccomment.php,如下所示:

   /** 
    * Method description
    *
    * @param  array $foo    Bla bla
    * @return string        More bla bla
    */

如何将此字符串解析为可以使用的字符串? 我需要从中提取“方法描述”文本。其他的东西对我来说并不重要,因为我可以使用其他反射方法来获取参数等。

3 个答案:

答案 0 :(得分:2)

trim(str_replace(array('/', '*'), '', substr($rc->getDocComment(), 0, strpos($rc->getDocComment(), '@'))));

假设评论始终采用该格式。

答案 1 :(得分:1)

我没有太多解析注释的经验,但是,将其视为一个字符串,我要做的是:

  1. 以新线爆炸:
  2. 修剪空格和* out
  3. 这样的事情:

    <?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
)