尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

使用 ReflectionDocBlock 解析简单 DocBlock:Summary 与 Description 提取实战指南

使用 ReflectionDocBlock 解析简单 DocBlock:Summary 与 Description 提取实战指南 文档开发工具【免费下载链接】ReflectionDocBlock项目地址https://gitcode.com/gh_mirrors/re/ReflectionDocBlock点击查看免费下载本指南基于 phpDocumentor 的 ReflectionDocBlock 库演示如何将一个字符串形式的 DocBlock 注释解析为结构化对象并提取其中的摘要Summary与描述Description。读完本文你将掌握DocBlockFactory的创建与调用方式、Summary 与 Description 的边界判定规则以及如何深入底层源码理解解析流程为后续解析标签Tag、重建 DocBlock 等高级操作打下基础。环境准备与安装ReflectionDocBlock 是一个通过 Composer 分发的 PHP 库。使用前需要先安装依赖并引入自动加载文件composer require phpdocumentor/reflection-docblock安装完成后在 PHP 脚本中引入vendor/autoload.php即可使用见 docs/examples/01-interpreting-a-simple-docblock.phprequire_once(__DIR__ . /../../vendor/autoload.php); use phpDocumentor\Reflection\DocBlockFactory;解析一个简单的 DocBlock完整示例本指南对应的官方示例代码位于 docs/examples/01-interpreting-a-simple-docblock.php完整代码如下?php require_once(__DIR__ . /../../vendor/autoload.php); use phpDocumentor\Reflection\DocBlockFactory; $docComment DOCCOMMENT /** * This is an example of a summary. * * This is a Description. A Summary and Description are separated by either * two subsequent newlines (thus a whiteline in between as can be seen in this * example), or when the Summary ends with a dot (.) and some form of * whitespace. */ DOCCOMMENT; $factory DocBlockFactory::createInstance(); $docblock $factory-create($docComment); // Should contain the first line of the DocBlock $summary $docblock-getSummary(); // Contains an object of type Description; you can either cast it to string or use // the render method to get a string representation of the Description. // // In subsequent examples we will be fiddling a bit more with the Description. $description $docblock-getDescription();关键步骤拆解创建工厂DocBlockFactory::createInstance()返回一个配置好的工厂实例。该工厂负责将字符串或支持getDocComment()方法的对象如 PHP 反射类解析为DocBlock对象。解析输入$factory-create($docComment)接受一个包含 DocBlock 注释的字符串。也可以直接传入对象此时工厂会调用对象的getDocComment()方法获取注释文本见 src/DocBlockFactory.php 中create方法的实现。提取摘要$docblock-getSummary()返回 DocBlock 的第一行摘要文本。提取描述$docblock-getDescription()返回一个DocBlock\Description对象可通过字符串转换或render()方法得到描述文本。Summary 与 Description 的边界规则示例中的 DocBlock 注释本身说明了 Summary 与 Description 的分离规则两条连续换行即中间存在一个空行如示例所示或者 Summary 以句点.结尾并跟有某种形式的空白。从源码看这条规则在DocBlockFactory::splitDocBlock()方法中以正则表达式实现见 src/DocBlockFactory.php 中splitDocBlock方法摘要以点号后跟换行\. \n或两个连续换行\n{2}为结束标志当一行以开头时摘要和描述都会在该行结束剩余内容被识别为标签区描述以开头的行作为结束标志。// 来自 src/DocBlockFactory.php 中 splitDocBlock() 的正则片段示意 (?! \. \n | \n{2} ) # End summary upon a dot followed by newline or two newlines [\n.]* (?! [ \t]* \pL ) # End summary when an is found as first character on a new line这意味着如果 DocBlock 只有一行摘要getDescription()会返回一个空的Description对象见 src/DocBlock.php 构造器中对$description为 null 时的处理如果 DocBlock 直接从标签开始则该 DocBlock 只有标签区而没有摘要和描述splitDocBlock()中的性能优化分支会直接返回标签文本。Description 对象的使用方式getDescription()返回的不是普通字符串而是一个phpDocumentor\Reflection\DocBlock\Description对象定义见 src/DocBlock/Description.php。它有两种方式转换为字符串直接类型转换(string) $description调用render()方法$description-render()。Description对象的内部结构包含一个正文模板bodyTemplate和一个内联标签列表tags。解析描述文本的过程由DescriptionFactory完成它会解释正文并拆分出内联标签再通过格式化器Formatter渲染完整文本。默认使用的格式化器是PassthroughFormatter见 src/DocBlock/Tags/Formatter/PassthroughFormatter.php。如果不希望使用工厂也可以直接构造Description对象$description new Description( This is a %1$s, [ new See(new Fqsen(\phpDocumentor\Reflection\DocBlock\Description)) ] );不过官方推荐始终使用DescriptionFactory因为它还会自动处理转义规则例如用大括号转义符号参见 docs/examples/playing-with-descriptions/02-escaping.php 示例。底层解析流程从字符串到 DocBlock 对象理解DocBlockFactory::create()的内部调用链见 src/DocBlockFactory.php可以更清晰地把握整个解析过程stripDocComment()移除/**、*/以及每行行首的*和多余空白统一换行符splitDocBlock()通过正则把剩余内容拆分为模板标记、摘要、描述和标签区四个部分descriptionFactory-create()将描述文本交给DescriptionFactory解析生成Description对象含内联标签parseTagBlock()将标签区按行拆分逐行交给TagFactory创建标签对象最后构造DocBlock对象将摘要、描述、标签、上下文Context和位置Location等信息封装起来见 src/DocBlock.php。DocBlock对象的核心访问方法包括getSummary()返回摘要字符串getDescription()返回Description对象getTags()返回所有标签数组getTagsByName($name)按名称过滤标签hasTag($name)判断是否包含指定标签。从简单解析走向高级用法本指南聚焦于最简单的解析场景即提取摘要与描述。在此基础上ReflectionDocBlock 还提供了更丰富的能力相关指南位于 docs/how-to 目录下解析 DocBlock 中的标签使用hasTag()、getTags()、getTagsByName()读取 DocBlock 中的标签重建一个 DocBlock使用Serializer将解析后的 DocBlock 还原为注释文本添加自定义标签通过静态工厂方法注册自定义标签类型。对应的可运行示例分别位于 docs/examples/02-interpreting-tags.php、docs/examples/03-reconstituting-a-docblock.php 和 docs/examples/04-adding-your-own-tag.php配合本指南一起阅读可以形成完整的 DocBlock 处理能力闭环。小结本文通过官方示例 docs/examples/01-interpreting-a-simple-docblock.php 演示了 ReflectionDocBlock 解析 DocBlock 的最基本流程创建DocBlockFactory、解析注释字符串、提取摘要与描述。同时结合 src/DocBlockFactory.php 的源码揭示了 Summary 与 Description 的分割规则连续两个换行或句点加空白以及底层解析调用链。掌握这一基础后即可顺畅过渡到标签解析、DocBlock 重建与自定义标签等进阶主题。赞分享文档开发工具【免费下载链接】ReflectionDocBlock项目地址https://gitcode.com/gh_mirrors/re/ReflectionDocBlock点击查看免费下载相关推荐如何使用ReflectionDocBlockPHP文档注释解析的终极指南如何使用ReflectionDocBlockPHP文档注释解析的终极指南 ReflectionDocBlock是一个强大的PHP库专门用于解析和操作PHPD文档开发工具uView 2.0组件源码深度剖析理解核心实现原理与设计思想uView 2.0组件源码深度剖析理解核心实现原理与设计思想 uView 2.0是全面兼容nvue的uni app生态框架提供了丰富的组件和便捷的工具帮助简单3步搞定SVG提取SVG Crowbar终极使用指南简单3步搞定SVG提取SVG Crowbar终极使用指南 SVG Crowbar是一款专为Chrome浏览器设计的书签工具能够从HTML文档中提取SVG节点开发工具上一篇番茄小说下载器完整指南打造个人离线图书馆的终极方案下一篇workerd 中 CompressionStream 与 DecompressionStream 的实现规范与一致性测试指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表