有没有可用的PHP DocBlock解析器工具?

时间:2010-03-27 21:49:39

标签: php documentation parsing docblocks

我想为一些项目构建一些规模较小但高度定制的文档站点。 PhpDocumentor非常棒,但非常沉重。我考虑过尝试调整模板,但是在花了几分钟的时间研究之后,我觉得这样做太多了。

理想情况下,我希望看到一些东西,我可以传递一堆文件并让它返回所有文件,类和属性和方法,以及它们的元数据,这样我就可以构建一些简单的模板基于数据。

是否有任何仅限DocBlock解析器的项目可以帮助我完成这项任务,或者我是否重新发明了这个轮子?

5 个答案:

答案 0 :(得分:21)

您可以使用Reflection API:

轻松完成此操作
/**
 * This is an Example class
 */
class Example
{
    /**
     * This is an example function
     */
    public function fn() 
    {
        // void
    }
}

$reflector = new ReflectionClass('Example');

// to get the Class DocBlock
echo $reflector->getDocComment()

// to get the Method DocBlock
$reflector->getMethod('fn')->getDocComment();

请参阅本教程:http://www.phpriot.com/articles/reflection-api

还有PEAR package可以解析DocBlocks。

答案 1 :(得分:6)

如果有人需要正则表达式(xdazz suggested来试试这个而且student310发表评论它可以满足她/他的需求)

if (preg_match_all('/@(\w+)\s+(.*)\r?\n/m', $str, $matches)){
  $result = array_combine($matches[1], $matches[2]);
}

示例(Demo

<?php
$str ='
/**    
 * @param   integer  $int  An integer
 * @return  boolean
 */
';
if (preg_match_all('/@(\w+)\s+(.*)\r?\n/m', $str, $matches)){
  $result = array_combine($matches[1], $matches[2]);
}

var_dump($result);

答案 2 :(得分:5)

只是为了更新答案。您可能还想查看phpDocumentor2项目。我认为它的PHP DocBlock解析器可以很容易地作为独立解决方案提取。

答案 3 :(得分:3)

作为furgas pointed out,我多年来一直使用phpDocumentor作为一个独立的项目,它运作良好。

<?php
$class = new ReflectionClass('MyClass');
$phpdoc = new \phpDocumentor\Reflection\DocBlock($class);

var_dump($phpdoc->getShortDescription());
var_dump($phpdoc->getLongDescription()->getContents());
var_dump($phpdoc->getTags());
var_dump($phpdoc->hasTag('author'));
var_dump($phpdoc->hasTag('copyright'));

答案 4 :(得分:-3)

您似乎想要一个可以导出已解析内容的特定详细信息的PHP解析器。

我们的Semantic Designs PHP Front End提供完整的PHP 4/5解析器(截至2016年包括PHP 7)。它解析PHP源代码,构建抽象语法树,用精确的位置信息标记每个节点,并使它们可供进一步使用。它可以做的一般事情是打印出任何子树作为原始文本。

在您的情况下,您需要扫描树,找到类/方法/属性(作为树节点)并打印源文本以及位置信息。我认为这将完全符合您的要求。