指南)
文檔開發(fā)工具【免費下載鏈接】ReflectionDocBlock項目地址https://gitcode.com/gh_mirrors/re/ReflectionDocBlock點擊查看免費下載本指南基于 phpDocumentor 的 ReflectionDocBlock 庫演示如何將一個字符串形式的 DocBlock 注釋解析為結(jié)構(gòu)化對象并提取其中的摘要Summary與描述Description。讀完本文你將掌握DocBlockFactory的創(chuàng)建與調(diào)用方式、Summary 與 Description 的邊界判定規(guī)則以及如何深入底層源碼理解解析流程為后續(xù)解析標(biāo)簽Tag、重建 DocBlock 等高級操作打下基礎(chǔ)。環(huán)境準(zhǔn)備與安裝ReflectionDocBlock 是一個通過 Composer 分發(fā)的 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完整示例本指南對應(yīng)的官方示例代碼位于 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();關(guān)鍵步驟拆解創(chuàng)建工廠DocBlockFactory::createInstance()返回一個配置好的工廠實例。該工廠負責(zé)將字符串或支持getDocComment()方法的對象如 PHP 反射類解析為DocBlock對象。解析輸入$factory-create($docComment)接受一個包含 DocBlock 注釋的字符串。也可以直接傳入對象此時工廠會調(diào)用對象的getDocComment()方法獲取注釋文本見 src/DocBlockFactory.php 中create方法的實現(xiàn)。提取摘要$docblock-getSummary()返回 DocBlock 的第一行摘要文本。提取描述$docblock-getDescription()返回一個DocBlock\Description對象可通過字符串轉(zhuǎn)換或render()方法得到描述文本。Summary 與 Description 的邊界規(guī)則示例中的 DocBlock 注釋本身說明了 Summary 與 Description 的分離規(guī)則兩條連續(xù)換行即中間存在一個空行如示例所示或者 Summary 以句點.結(jié)尾并跟有某種形式的空白。從源碼看這條規(guī)則在DocBlockFactory::splitDocBlock()方法中以正則表達式實現(xiàn)見 src/DocBlockFactory.php 中splitDocBlock方法摘要以點號后跟換行\(zhòng). \n或兩個連續(xù)換行\(zhòng)n{2}為結(jié)束標(biāo)志當(dāng)一行以開頭時摘要和描述都會在該行結(jié)束剩余內(nèi)容被識別為標(biāo)簽區(qū)描述以開頭的行作為結(jié)束標(biāo)志。// 來自 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 構(gòu)造器中對$description為 null 時的處理如果 DocBlock 直接從標(biāo)簽開始則該 DocBlock 只有標(biāo)簽區(qū)而沒有摘要和描述splitDocBlock()中的性能優(yōu)化分支會直接返回標(biāo)簽文本。Description 對象的使用方式getDescription()返回的不是普通字符串而是一個phpDocumentor\Reflection\DocBlock\Description對象定義見 src/DocBlock/Description.php。它有兩種方式轉(zhuǎn)換為字符串直接類型轉(zhuǎn)換(string) $description調(diào)用render()方法$description-render()。Description對象的內(nèi)部結(jié)構(gòu)包含一個正文模板bodyTemplate和一個內(nèi)聯(lián)標(biāo)簽列表tags。解析描述文本的過程由DescriptionFactory完成它會解釋正文并拆分出內(nèi)聯(lián)標(biāo)簽再通過格式化器Formatter渲染完整文本。默認使用的格式化器是PassthroughFormatter見 src/DocBlock/Tags/Formatter/PassthroughFormatter.php。如果不希望使用工廠也可以直接構(gòu)造Description對象$description new Description( This is a %1$s, [ new See(new Fqsen(\phpDocumentor\Reflection\DocBlock\Description)) ] );不過官方推薦始終使用DescriptionFactory因為它還會自動處理轉(zhuǎn)義規(guī)則例如用大括號轉(zhuǎn)義符號參見 docs/examples/playing-with-descriptions/02-escaping.php 示例。底層解析流程從字符串到 DocBlock 對象理解DocBlockFactory::create()的內(nèi)部調(diào)用鏈見 src/DocBlockFactory.php可以更清晰地把握整個解析過程stripDocComment()移除/**、*/以及每行行首的*和多余空白統(tǒng)一換行符splitDocBlock()通過正則把剩余內(nèi)容拆分為模板標(biāo)記、摘要、描述和標(biāo)簽區(qū)四個部分descriptionFactory-create()將描述文本交給DescriptionFactory解析生成Description對象含內(nèi)聯(lián)標(biāo)簽parseTagBlock()將標(biāo)簽區(qū)按行拆分逐行交給TagFactory創(chuàng)建標(biāo)簽對象最后構(gòu)造DocBlock對象將摘要、描述、標(biāo)簽、上下文Context和位置Location等信息封裝起來見 src/DocBlock.php。DocBlock對象的核心訪問方法包括getSummary()返回摘要字符串getDescription()返回Description對象getTags()返回所有標(biāo)簽數(shù)組getTagsByName($name)按名稱過濾標(biāo)簽hasTag($name)判斷是否包含指定標(biāo)簽。從簡單解析走向高級用法本指南聚焦于最簡單的解析場景即提取摘要與描述。在此基礎(chǔ)上ReflectionDocBlock 還提供了更豐富的能力相關(guān)指南位于 docs/how-to 目錄下解析 DocBlock 中的標(biāo)簽使用hasTag()、getTags()、getTagsByName()讀取 DocBlock 中的標(biāo)簽重建一個 DocBlock使用Serializer將解析后的 DocBlock 還原為注釋文本添加自定義標(biāo)簽通過靜態(tài)工廠方法注冊自定義標(biāo)簽類型。對應(yīng)的可運行示例分別位于 docs/examples/02-interpreting-tags.php、docs/examples/03-reconstituting-a-docblock.php 和 docs/examples/04-adding-your-own-tag.php配合本指南一起閱讀可以形成完整的 DocBlock 處理能力閉環(huán)。小結(jié)本文通過官方示例 docs/examples/01-interpreting-a-simple-docblock.php 演示了 ReflectionDocBlock 解析 DocBlock 的最基本流程創(chuàng)建DocBlockFactory、解析注釋字符串、提取摘要與描述。同時結(jié)合 src/DocBlockFactory.php 的源碼揭示了 Summary 與 Description 的分割規(guī)則連續(xù)兩個換行或句點加空白以及底層解析調(diào)用鏈。掌握這一基礎(chǔ)后即可順暢過渡到標(biāo)簽解析、DocBlock 重建與自定義標(biāo)簽等進階主題。贊分享文檔開發(fā)工具【免費下載鏈接】ReflectionDocBlock項目地址https://gitcode.com/gh_mirrors/re/ReflectionDocBlock點擊查看免費下載相關(guān)推薦如何使用ReflectionDocBlockPHP文檔注釋解析的終極指南如何使用ReflectionDocBlockPHP文檔注釋解析的終極指南 ReflectionDocBlock是一個強大的PHP庫專門用于解析和操作PHPD文檔開發(fā)工具uView 2.0組件源碼深度剖析理解核心實現(xiàn)原理與設(shè)計思想uView 2.0組件源碼深度剖析理解核心實現(xiàn)原理與設(shè)計思想 uView 2.0是全面兼容nvue的uni app生態(tài)框架提供了豐富的組件和便捷的工具幫助簡單3步搞定SVG提取SVG Crowbar終極使用指南簡單3步搞定SVG提取SVG Crowbar終極使用指南 SVG Crowbar是一款專為Chrome瀏覽器設(shè)計的書簽工具能夠從HTML文檔中提取SVG節(jié)點開發(fā)工具上一篇番茄小說下載器完整指南打造個人離線圖書館的終極方案下一篇workerd 中 CompressionStream 與 DecompressionStream 的實現(xiàn)規(guī)范與一致性測試指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考