热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PEAR:使用PHPDoc轻松建立你的PEAR文档

文章标题:PEAR:使用PHPDoc轻松建立你的PEAR文档。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  1. 什么是phpdoc
  PHPDoc是PEAR下面的一个非常优秀的模块,它的目标是实现类似javadoc的功能,可以为你的代码快速生成具有相互参照,索引等功能的API文档。如果你使用过javadoc生成的文档(如jdk的文档),你会非常清楚,如果你没有用过,那么下面是一个phpdoc生成它自己的文档页面的截图:
  

  从图上可以知道,phpdoc生成的文档和JAVADOC很相似,它有多种的索引方式:
  Packageindex:这是按照模块来索引 Classtree:这是按照你的php类的继承关系,可以生成一个树状的索引 Modulegroups:这是按照模块划分
  Elementlist:这是你的所有元素(类,方法,过程/函数,变量)的字母顺序的索引
  
  2. phpdoc的结构及功能
  由于phpdoc本身也是符合pear的应用程序,我们首先了解一下它的结构。phpdoc是全部采用OOP的思想来编写的,这也是PEAR所推荐的方式,phpdoc的工作原理:
  
  phpdoc扫描指定目录下面的php源代码,扫描其中的关键字,截取需要分析的注释,然后分析注释中的专用的tag,生成xml文件,接着根据已经分析完的类和模块的信息,建立相应的索引,生成xml文件
  对于生成的xml文件,使用定制的模板输出为html文件。
  
  从设计上来说,phpdoc使用了2个超类:PhpdocObject和PhpdocError。这是整个PHPDOC的基本类,这种方式也是PEAR所推荐的,也就是说当你编写你自己的应用框架的时候,最好能够有一个基本的超类,而其他的子类或者是功能类都有一个共同的祖先。在扫描源代码过程中,PHPDOC使用的是类似GREP的形式,并没有象我们通常想的那样,使用正则表达式来实现,根据作者的解释,他曾经尝试过使用正则表达式,但是资源的占用和处理速度都很难令人满意,因此采用了这种非常规的形式,具体的实现有兴趣的读者可以参看源代码。我认为PHPDOC令人满意的另一方面是其分析结果是以XML形式保存的,这样就意味着其他的应用程序很容易可以共享这个数据,同时PHPDCO也提供了相应的接口,你可以实现这个接口,把API文档生成其他的形式,比如PDF,LATEX,WORD等等。目前,PHPDOC的分析结果可以以HTML形式表现,以后可能会有更多的形式。即使是HTML形式,由于使用了模板机制(他使用了PEAR的IT和ITX模块来实现),你可以很方便地定制成你自己需要的风格,
  
  3. PHPDoc基础
  PHPDoc是从你的源代码的注释中生成文档,因此在给你的程序做注释的过程,也就是你编制文档的过程。
  
  从这一点上讲,PHPdoc促使你要养成良好的编程习惯,尽量使用规范,清晰文字为你的程序做注释,同时多多少少也避免了事后编制文档和文档的更新不同步的一些问题。
  
  编制符合PHPDoc规范的注释是非常重要的,掌握了这一点,基本上就可以利用PHPDoc为你工作了。
  
  注释在PHPDoc中分为文档注释和非文档注释
  
  3.1 文档注释
  文档注释实际上是一些特殊形式的多行注释,一般是放在你需要注释的特定的关键字(这些关键字是指将会被phpdoc分析的那些关键字,相关的关键字列表请参看后面第4节的说明)前面。下面是一个文档注释的例子:
  /**
   * Common base class of all phpdoc classes (简述,用在索引列表中)
   *
   * As a kind of common base class PhpdocObject holds
   * configuration values (e.g. error handling) and debugging
   * methods (e.g. introspection()). It does not have a constructor,
   * so you can always inheritig Phpdoc classes from this
   * class without any trouble. (详细的功能描述)
   *
   * @author  Ulf Wendel
   * @version $Id: PhpdocObject.php,v 1.3 2001/02/18 15:29:29 uw Exp $
   * @package PHPDoc (文档标记)
   */
  class PhpdocObject {
  .....
  }
  
  以上的文档注释将会生成如下的文档:
  PhpdocObject
  
  PhpdocObject
  
  Common base class of all phpdoc classes
  
  private class PhpdocObject
  
  Common base class of all phpdoc classes
  As a kind of common base class PhpdocObject holdsconfiguration values (e.g. error
  handling) and debuggingmethods (e.g. introspection()). It does not have a
  constructor,so you can always inheritig Phpdoc classes from thisclass without any trouble.
  
  Authors Ulf Wendel
  Version $Id: PhpdocObject.php,v 1.3 2001/02/18 15:29:29 uw Exp $
  
  3.2 非文档性注释
  如果你的注释没有放在那些phpdoc指定的关键字前面,那么phpdoc认为你所作的这些注释是属于非文档注释,将不会被phpdoc所分析,也不会出现在你产生的api文当中。
  
  3.3 如何书写你的文档性注释
  从3.1 我们可以看到,一个文档性的注释,是由3个部分组成的,分别是:功能简述区,功能详细说明区,文档标记区。
  
  首先,第一行是一个注释开始的标志"/**",然后是回车,从第2行开始就是功能简述区,功能简述区是以缩进的"*"开始的,在简述的正文和这个"*"号之间用空格分隔(注意,在文档中,都是以*开始,并且这些*保持对齐的缩进格式)。功能简述的正文一般是简明扼要地说明这个类,方法或者函数的功能,功能简述的正文在生成的文档中将显示在索引区。
  
  在功能简述区后面是一个空的注释行,用来分割简述区和详细说明区。功能详细说明区也是以缩进的'*"来引导的,这部分主要是详细说明你的API的功能,用途,如果可能,也可以有用法举例等等。在这部分,你应该着重阐明你的API函数或者方法的通常的用途,用法,并且指明是否是跨平台的(如果涉及到),对于和平台相关的信息,你要和那些通用的信息区别对待,通常的做法是另起一行,然后写出在某个特定平台上的注意事项或者是特别的信息,这些信息应该足够,以便你的读者能够编写相应的测试信息,比如边界条件,参数范围,断点等等。
  
  在功能详细说明区后面,是空白的注释行,然后是文档标记区,你可以在这些书写相关的文档标记(这些文档标记的用法请参考后面的第4节),指明一些技术上的细节信息,最主要的是调用参数类型,返回值极其类型,继承关系,相关方法/函数等等。多个文档标记应该使用相同的缩进,组成一个"标记块",便于阅读和分析。
  
  在文档标记区下面的一行就是注释结束行"*/",注意,在注释结束标记*/后面应该直接跟一个回车,不要另外附加其他的东西,否则可能造成PHPDOC分析出错。
  
  以上就是书写一个文档性注释的基本方法,下面我们讨论一下书写文档时的规范和技巧。
  
  3.4 文档书写指南
  在你描述你的代码的用途或者是功能的时候,最好能够遵循大多数人的习惯,通俗地讲就是"你告诉我的信息正是我想要知道的"。为此,这里将介绍一些书写文档注释的技巧和规范,希望能够对你有所帮助:
  
  使用 来标志关键字和命名及相关的代码。如果在文档中需要引用一些关键字,变量名,或者是你要给出一些代码的例子,那么你最好使用来将这些关键字,变量名,代码片段和你的文档分隔开,这样,读者阅读的时候,将会知道,这些将是运行的代码,关键字而不是你的描述性的语言。
  使用简单,明确的语言,避免冗长,复杂,晦涩的长句来描述。尤其是在功能简述,参数说明等索引部分中,尽量使用简单明白的语言揭示主要的信息,把其他的细节放在详细说明部分去阐述。如果你使用英语,建议使用短语而不一定是句子。
  如果使用英语,建议使用第3人称单数的形式来说明
  在给方法,函数说明的时候,你需要说明的是这个方法"作了什么",而不是"怎么做"。因此,建议你的说明是以动词开始,比如"返回记录数","删除给定的记录"等等。
  当你引用的某个对象或者变量是从当前的类中建立的,那么使用 "this" 代替 "the" 来指代那个对象或者是变量
  避免空话,废话,对于你所要给出的API,在你的API后面要有它的功能描述,是其能够"自成文档"。所谓的空话,废话是指,你的描述不是功能描述,而只是API名称的简单重复和罗列,或者是用另一个API来解释这个API,到头来,你的读者也不知道你所要表达的内容实质。你的描述,应该是那些从你的类名,方法名,或者是函数名看不到的补充的信息,而不是把你的API名称再重复一遍。很多人可能很多人(包括我)不知不觉中就犯了这个错误,下面是一个例子:
   /**
   * 设置用户记录集
   *
   * @param text 给定的表名
   */
  function set_user_record($table) {
  
  你从上面这段注释中能够知道什么?因此,这段注释实际上是废话,因为你从函数名称上是可以看出的,下面是改进后的:
   /**
   * 打开系统用户表并设置为当前用户记录集,此记录集将用于随后相关用户数据更新操作的缺省记录集。如果失败则抛出一个数据库错误。
   *
   * @param text 要打开的系统用户表的表名。
   */
  function set_user_record($table) {
  
  适当地使用链接。为你文档中引用的API名称(包括你的其他类及方法,PHP的函数等)添加适当的链接是很受欢迎的:你可以使用@link标记来添加到相关的API的链接,不过,你没有必要为文档中引用的所有的API都添加连接,这样会很不美观,这里有一个简单的标准:如果用户在这个地方看到某个API
推荐阅读
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文介绍如何在 Unity 的 XML 配置文件中,将参数传递给自定义生命周期管理器的构造函数。我们将详细探讨 CustomLifetimeManager 类的实现及其配置方法。 ... [详细]
author-avatar
某一句爱的搁浅-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有