欢迎来到天天文库
浏览记录
ID:38804399
大小:20.62 KB
页数:8页
时间:2019-06-19
《解析器与反射API的集成》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、解析器与反射API的集成首先,将之前清单中的文档块解析器与反射API集成在一起。通过扩展核心的Reflecticn类并且将解析器作为静态方法添加进去,就可以做到这一点。代码显示了这一扩展。将这段代码和所有随后的反射类都放到一个名为DocumentingReflection.php的公共的包含文件中。集成文档注释解析器(DocumentingReflection.php)ClassDocumentingReflectionextendsReflection{PublicstaticfunctionParseDocCo
2、mment($docComment){$returnData=$comments=$tags=$array();$tagNames=$tagData=array();$tokens=docblock_tokenize($docComment,true);Foreach($tokensas$token){Switch($token[0]){CaseDOCBLOCK_TEXT:If(!isset($tagId)){$comments[]=$token[1];}else{If(array_key_exists($tagI
3、d,$tagData)){$tagData[$tagId].=’’.trim($token[1]);}else{$tagData[$tagId]=trim($token[1]);}}Break;CaseDOCBLOCK_TAG:$tagId=uniquid();$tagNames[$tagId]=trim($token[1],’@’);Break;}}Foreach($tagDataas$tagId=>$data){$tagName=$tagNames[$tagId];If(array_key_exists($ta
4、gName,$tags)){If(!is_array($tags[$tagName])){$backupData=$tags[$tagName];$tags[$tagName]=array();$tags[$tagName]=$backupData;}$tag[$tagName]=$data;}else{$tags[$tagName]=$data;}}$returnData[‘comments’]=$comments;$returnData[‘tags’]=$tags;$returnData[‘tokens’]=$
5、tokens;Return$returnData;}}现在已经定义了静态函数ParseDocComment.这正是添加附加的处理逻辑功能的地方,例如处理行内标签的功能。但是在实现这些功能之前,需要扩展另外一些反射类。扩展反射类下一个要扩展的类是ReflectionMethod类。这是因为它是最全面的反射实现类,它仍然包含了getDocComment()方法。还需要扩展ReflectionParameter类,但是需要从相关联的方法中获取数据,然后这个方法类的扩展才能实现。下面代码,创建了DocumentingRef
6、lectionMethod类,将reflectionMethod类与ParseDocComment类集成。创建DocumentingReflectionMethod类(DocumentingReflection.php)ClassDocmentingReflectionMethodextendsReflectionMethod{Protected$_comments,$_tags,$_tokens,$_declaringClass;Publicfunction__construct($object,$method)
7、{Parent::__construct($object,$method);$docComment=$this->getDocComment();$this->_declaringClass=$object;$parsedComment=DocumentingReflection::ParseDocComment($docComment);$this->_comments=$parsedComment[‘comments’];$this->_tags=$parsedComment[‘tags’];$this->_t
8、okens=$parsedComment[‘tokens’];}PublicfunctionprintDocTokens(){Foreach($this->_tokensas$token){Echo$token[0].”=”;Echodocblock_token_name($token[1]).’=’;Print_r($token[1]);Echo“”;
此文档下载收益归作者所有