public function parsePhpDoc($string)
{
preg_match('#^/\\*\\*(.*)\\*/#s', trim($string), $comment);
$comment = trim($comment[1]);
preg_match_all('/^\\s*\\*(.*)/m', $comment, $lines);
$lines = $lines[1];
$tags = array();
$currentTag = '';
$currentData = '';
foreach ($lines as $line) {
$line = trim($line);
if (substr($line, 0, 1) == '@') {
if ($currentTag) {
$tags[$currentTag][] = $currentData;
} else {
$tags['description'] = $currentData;
}
$currentData = '';
preg_match('/@([a-zA-Z_]*)/', $line, $match);
$currentTag = $match[1];
}
$currentData = trim($currentData . ' ' . $line);
}
if ($currentTag) {
$tags[$currentTag][] = $currentData;
} else {
$tags['description'] = $currentData;
}
//parse tags
$regex = array('param' => array('/^@param\\s*\\t*([a-zA-Z_\\\\[\\]|]*)\\s*\\t*\\$([a-zA-Z_]*)\\s*\\t*(.*)/', array('type', 'name', 'description')), 'return' => array('/^@return\\s*\\t*([a-zA-Z_\\\\[\\]|]*)\\s*\\t*(.*)/', array('type', 'description')));
foreach ($tags as $tag => &$data) {
if ($tag == 'description') {
continue;
}
foreach ($data as &$item) {
if ($regex[$tag]) {
preg_match($regex[$tag][0], $item, $match);
$item = array();
$c = count($match);
for ($i = 1; $i < $c; $i++) {
if ($regex[$tag][1][$i - 1]) {
$item[$regex[$tag][1][$i - 1]] = $match[$i];
}
}
}
}
if (count($data) == 1) {
$data = $data[0];
}
}
return $tags;
}