Jarves\Configuration\Model::parsePhpDoc PHP Method

parsePhpDoc() public method

Parse phpDoc string and returns an array.
public parsePhpDoc ( string $string ) : array
$string string
return array
    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;
    }