Pro PHP- Patterns, Frameworks, Testing and More

(vip2019) #1
CHAPTER 7 ■ REFLECTION API^87

Listing 7-12. Integrating the Doccomment Parser (DocumentingReflection.php)

class DocumentingReflection extends Reflection {

public static function ParseDocComment($docComment) {

$returnData = $comments = $tags = array();
$tagNames = $tagData = array();

$tokens = docblock_tokenize($docComment,true);
foreach($tokens as $token) {

switch( $token[0] ) {

case DOCBLOCK_TEXT:

if(!isset($tagId)) {
$comments[] = $token[1];
} else {
if(array_key_exists($tagId, $tagData)) {
$tagData[$tagId] .= ' '. trim($token[1]);
} else {
$tagData[$tagId] = trim($token[1]);
}
}
break;

case DOCBLOCK_TAG:

$tagId = uniqid();
$tagNames[$tagId] = trim($token[1], '@ ');
break;

}
}

foreach($tagData as $tagId => $data) {

$tagName = $tagNames[$tagId];
if(array_key_exists($tagName, $tags)) {
if(!is_array($tags[$tagName])) {
$backupData = $tags[$tagName];
$tags[$tagName] = array();
$tags[$tagName][] = $backupData;
}
$tags[$tagName][] = $data;

McArthur_819-9C07.fm Page 87 Friday, February 22, 2008 8:59 AM

Free download pdf