Are there any PHP DocBlock parser tools available? [closed]
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 5 years ago.
开发者_如何学Python Improve this questionI would like to build some smaller scale but hightly customized documentation sites for a few projects. PhpDocumentor is pretty great but it is very heavy. I thought about trying to tweak the templates for that but after spending only a couple of minutes looking into it I decided that it would be too much work.
Ideally I'd like to see something to which I could pass a bunch of files and have it return all of the files, classes and properties and methods, along with their meta data, so that I could build out some simple templates based on the data.
Are there any DocBlock parser-only projects that will help me in this task, or am I stuck reinventing that wheel?
You can do this easily yourself with the 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();
See this tutorial: http://www.phpriot.com/articles/reflection-api
There is also a PEAR package that can parse DocBlocks.
In case someone needs a regular expression (xdazz suggested to try this and student310 commented it works for her/his needs)
if (preg_match_all('/@(\w+)\s+(.*)\r?\n/m', $str, $matches)){
$result = array_combine($matches[1], $matches[2]);
}
Example (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);
Just to update the answers. You may also want to check out the phpDocumentor2 project. I think that it's PHP DocBlock parser can be easily extracted as standalone solution.
As furgas pointed out, I've been using phpDocumentor for years as a standalone project and it works fine.
<?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'));
精彩评论