我想为一些项目构建一些规模较小但高度定制的文档站点。 PhpDocumentor非常棒,但非常沉重。我考虑过尝试调整模板,但是在花了几分钟的时间研究之后,我觉得这样做太多了。
理想情况下,我希望看到一些东西,我可以传递一堆文件并让它返回所有文件,类和属性和方法,以及它们的元数据,这样我就可以构建一些简单的模板基于数据。
是否有任何仅限DocBlock解析器的项目可以帮助我完成这项任务,或者我是否重新发明了这个轮子?
答案 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源代码,构建抽象语法树,用精确的位置信息标记每个节点,并使它们可供进一步使用。它可以做的一般事情是打印出任何子树作为原始文本。
在您的情况下,您需要扫描树,找到类/方法/属性(作为树节点)并打印源文本以及位置信息。我认为这将完全符合您的要求。