0

我正在使用反射从一个方法中获取文档注释: http ://www.php.net/manual/en/reflectionclass.getdoccomment.php ,它看起来像这样:

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

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

4

3 回答 3

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

假设评论总是采用这种格式。

于 2012-07-12T22:49:47.303 回答
1

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

  1. 按新线展开:
  2. 修剪空格和 * out

像这样的东西:

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

但是,可能并不理想,因为描述可能不止一行。

于 2012-07-12T23:02:45.503 回答
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
)
于 2020-03-12T20:28:56.227 回答