需要从javadoc注释(例如有下面字符串注释)里提取方法的参数($id和$name)和说明(ID名和名字),有什么好的方法呢?本人其实也有一个想法,不过在提取参数和说明时用了很多正则,感觉比较繁琐,想集思广益,问下大家还有什么好的办法呢?效率越高越好;^)$test = "
/**
 * 方法名
 * @param int $id ID名
 * @param string $name 名字
 * @return unknow";
 */

解决方案 »

  1.   

    提取之后做什么用?
    如果是生成文档就用phpdoc,
    如果要动态分析类可以用反射
      

  2.   

    <pre>
    <?php
    $test = '
    /**
     * 方法名
     * @param int $id ID名
     * @param string $name 名字
     * @return unknow
     */';
    preg_match('#/\*[\*\s]+(\S+)#',$test,$m);
    echo '函数名称:'.$m[1]."\n";
    echo "参数:\n";
    preg_match_all('/@param.*(\$\w+) (\S*)/',$test,$m);
    foreach ($m[1] as $k => $v){
    echo $v.':'.$m[2][$k]."\n";
    }
    ?>
      

  3.   

    如果我也想把字符串里的参数类型int和string也取出来,不过可能有种情况是有些字符串里写有参数的类型,有些没,例如下面这种情况,没有参数类型的时候就取空,该怎么写这个正则呢?$test = "
    /**
     * 方法名
     * @param int $id ID名
     * @param string $name 名字
     * @param $noParam 没变量类型的参数
     * @return unknow";
     */
      

  4.   

    <pre>
    <?php
    $test = '
    /**
     * 方法名
     * @param int $id ID名
     * @param string $name 名字
     * @param $noParam 没变量类型的参数
     * @return unknow
     */';
    preg_match('#/\*[\*\s]+(\S+)#',$test,$m);
    echo '函数名称:'.$m[1]."\n";
    echo "参数:\n";
    preg_match_all('/@param ?(.*) (\$\w+) (\S*)/',$test,$m);
    foreach ($m[2] as $k => $v){
        echo $v.':'.$m[3][$k].',类型:'.($m[1][$k]?$m[1][$k]:'未知')."\n";
    }
    ?>
      

  5.   

    脑子里模糊的记得php5 有个反射好像可以获取到注释.
      

  6.   


    <?php
    class test{
        /**
        * 测试   
        * @param  string $test1 参数1
        * @return bool 
        */
         function t2($test1){
             
         }
    }$r=new ReflectionMethod ('test','t2');print_r($r->getDocComment());?>  老实说我自己都没用过这个,,先抛个石头,问下路. 看看有没有高手