CHAPTER 7 ■ REFLECTION API^87Listing 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