



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
解析基于反射的文栏数据在前一章中,我介绍了文档注释是如何与程序一起存储的,并以将会介绍如何使用反射技术访问这些数据。访问文档注释数据比较容易.稍后会加以介绍,但是一旦获得了注释数据.就需要将它解析为一种可用的格式。所以,首先看一下如何解析注释。安装文档块分词器 使用文档块分词器可以解析文档块注释信息。然而,安装分词器需要一些技巧。 在以下的说明中,假设有一个可用的pecl命令。并且使用的是UNIX. Linux或者Mac OSX操作系统,然而,在Windows系统中,安装过程是很相似的。 首先,布要安装文档块pecl扩展。使用管理员账户执行以下的命令即可。 Pecl install docblock文档块包应该有一个稳定的包了,不过.如果还没有的话.就会看到如下的警告信息。Failed to download pecl/docblock within preferred state *stable*,latest release is version 0.2.0,stability “alpha”,use “channel://docblock-0.2.0” to install在这种情况下,使用命令返网的完整URL,并且以以下形式重新运行install命令。Pecl install channel://docblock-0.2.0如果一切正常,就应该已经安装好文档块分词器了,使用以下命令可以确认它是否能够正确运行Php I |grep DocBlock然后,会看到以下结果如果能够正常运行的话.DocBlock Tokenizer support=enabled 如果没有看到这样的输出结果.可能需要在php.ini文件中激活扩展。执行以下命令找到Php.ini文件Php I |grep php.ini应该得到与以下类似的结果。Configuration File (php.ini) Path=/etc/php5.1/cli/php.ini然后,需要向php.ini文件添加以一下文本以激活文档块扩展。Extension=docblock.so最后,重新执行命令以检查文档块是否已经安装成功。 只要文档块扩展开始运行,就可以使用分词器风格的解析器去解析文档块注释。然而,首先需要从反射API那里实际地获得文档注释数据,以便加以处理。代码演示了如何使用反射技术访问文档注释数据。/*这趋一个文档注释*这个文档注释用夹说明demo类*/Class demo() $reflectionClass new ReflectionClass(“demo”); $docComment = $reflectionClass-getDocComment();Print($docComent);执行代码.会生成以下输山结果. /*这是个文档注释 *这个文档注释用来说明demo类 */ 下一步,对这个数据做粉刺处理给文档注释数据做分词处理文档块分词器pecl扩展的主要方法是mixed docblock_tokenize($comment,$terseMode=false)简洁模式参数控制了是否在解析结果中包含非语义标识符,如commentstart标识符。这个函数会返回一个标识符数组以及与之相关联的数据r 需要的第二个函数是docblock_token_name($token)函数。这个函数接收一个标识符ID,这个ID是从分词过程返回的数组项的第一个索引。函数会将数字标识符ID转换为可读的字符串。 getDocComment();$tokens = docblock_tokenize($docComment,true);Foreach($tokens as $token) Echo $token0 .=; Echo docblock_token_name($token1).=; Print_r($token1); Echo “n”;这段代码的输出结果如下1=DOCBLOCK_NEWLINE=2=DOCBLOCK_WHITESPACE=36=DOCBLOCK_TEXT=This is a doccomment1=DOCBLOCK_NEWLINE=1=DOCBLOCK_NEWLINE=2=DOCBLOCK_WHITESPACE=36=DOCBLOCK_TEXT=This doccomment documents the class demo1=DOCBLOCK_NEWLINE=这一结果看起来让人难以劣迹,仅仅是一些常量而已。但需要的数据已经在里面了。粉刺处理的结果是一个由数组组成的数组。数组中的每个数组项代表了文档块的一部分。每部分都是一个标识符常量以及与之相关联的数据。对于这一粉刺处理的作用来说,我们只关注标签和文字信息。解析标识符/*这是一个文档注释*这个文档注释用来说明demo类*author kevin McArthur*example 这是一个多行示例*并且更加有效*example 这是另一个单独的示例/Class demo$reflectionClass = new ReflectionClass(demo);$docComment = $reflectionClass-getDocComment();$tokens = docblock_tokenize($docComment,true);$comments = array();$tags = array();$tagdata=array();Foreach($tokens as $token) Switch($token0) Case DOCBLOCK_TEXT: If(!isset($tagid) $comments=$token1;elseIf(array_key_exists($tagid,$tagdata) $tagdata$tagid .=”.trim($token1);else $tagdata$tagid = trim($token1);Break; Case DOCBLOCK_TAG: $tagid =uniqid(); $tags$tagid =trim($token1,);$compiled =array();Foreach($tagdata as $tagid=$data) $tagName = $tags$tagid;/* 为具有相同名称的多个标签创建数组*/If(array_key_exists($tagName,$compiled)If(!is_array($compiled$tagName)$oldData = $compiled$tagName;$compiled$tagName = array();$compiled$tagName = $oldData;$compiled$tagName=$data;else $compiled$tagName=$data;Print_r($comments);Print_r($compiled);解析器执行后输出结果Array( 0=This is a doccomment comment 1=This doccomment documents the class demo)Array( author=Kevin McArthur example=Array(0= This is a multiline example and this is more than valid1=This is a anthor separate example)在这一解析过程中,需要迭代访问由分词函数产生的标识符。在迭代过程中,需要作出一些假设。如果标签还没有出现,就假设所有的文本都是注释。一旦
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广西事业单位e类面试试题及答案
- 工程应急救援员特殊工艺考核试卷及答案
- 安全员B证考试题库建筑及答案解析
- 2025专业版企业代理合同范本
- 健康管理师职业考核试卷及答案
- 竖井钻机工成本控制考核试卷及答案
- 纤维板工测试考核试卷及答案
- 绞盘机司机突发故障应对考核试卷及答案
- 江苏会计从业资格考试及答案解析
- 畜牧技术员协作考核试卷及答案
- 省级临床重点专科建设项目神经内科重点专科建设实施方案
- 贵州省遵义市多校2024-2025学年九年级上学期第一次月考数学试题(无答案)
- 人教版六年级上册道德与法治教案(5篇)
- 生涯拍卖会课件高一上学期主题班会
- 中医形神兼养
- GB/T 44241-2024虚拟电厂管理规范
- SYT 6680-2021 石油天然气钻采设备 钻机和修井机出厂验收规范-PDF解密
- 实用美术基础中职全套教学课件
- 子宫内膜癌的预防和早期发现
- 债权债务法律知识讲座
- 个人停车位租赁合同模板
评论
0/150
提交评论