探讨:如何使用PhpDocumentor生成文档


Posted in PHP onJune 25, 2013

命令行方式:

在phpDocumentor所在目录下,输入phpdoc ?h会得到一个详细的参数表,其中几个重要的参数如下:
-f 要进行分析的文件名,多个文件用逗号隔开
-d 要分析的目录,多个目录用逗号分割
-t 生成的文档的存放路径
-o 输出的文档格式,结构为输出格式:转换器名:模板目录。
  例如:phpdoc -o HTML:frames:earthli -f test.php -t docs

Web界面生成

在新的phpdoc中,除了在命令行下生成文档外,还可以在客户端浏览器上操作生成文档,具体方法是先把PhpDocumentor的内容放在apache目录下使得通过浏览器可以访问到,访问后显示如下的界面:

点击files按钮,选择要处理的php文件或文件夹,还可以通过该指定该界面下的Files to ignore来忽略对某些文件的处理。

然后点击output按钮来选择生成文档的存放路径和格式.

最后点击create,phpdocumentor就会自动开始生成文档了,最下方会显示生成的进度及状态,如果成功,会显示
Total Documentation Time: 1 seconds
done
Operation Completed!!
然后,我们就可以通过查看生成的文档了,如果是pdf格式的,名字默认为documentation.pdf。
给php代码添加规范的注释

PHPDocument是从你的源代码的注释中生成文档,因此在给你的程序做注释的过程,也就是你编制文档的过程。

从这一点上讲,PHPdoc促使你要养成良好的编程习惯,尽量使用规范,清晰文字为你的程序做注释,同时多多少少也避免了事后编制文档和文档的更新不同步的一些问题。

在phpdocumentor中,注释分为文档性注释和非文档性注释。

所谓文档性注释,是那些放在特定关键字前面的多行注释,特定关键字是指能够被phpdoc分析的关键字,例如class,var等,具体的可参加附录1.

那些没有在关键字前面或者不规范的注释就称作非文档性注释,这些注释将不会被phpdoc所分析,也不会出现在你产生的api文当中。

如何书写文档性注释:

所有的文档性注释都是由/**开始的一个多行注释,在phpDocumentor里称为DocBlock, DocBlock是指软件开发人员编写的关于某个关键字的帮助信息,使得其他人能够通过它知道这个关键字的具体用途,如何使用。PhpDocumentor规定一个DocBlock包含如下信息:
1. 功能简述区
2. 详细说明区
3. 标记tag

文档性注释的第一行是功能描述区,正文一般是简明扼要地说明这个类,方法或者函数的功能,功能简述的正文在生成的文档中将显示在索引区。功能描述区的内容可以通过一个空行或者 . 来结束

在功能描述区后是一个空行,接着是详细说明区,. 这部分主要是详细说明你的API的功能,用途,如果可能,也可以有用法举例等等。在这部分,你应该着重阐明你的API函数或者方法的通常的用途,用法,并且指明是否是跨平台的(如果涉及到),对于和平台相关的信息,你要和那些通用的信息区别对待,通常的做法是另起一行,然后写出在某个特定平台上的注意事项或者是特别的信息,这些信息应该足够,以便你的读者能够编写相应的测试信息,比如边界条件,参数范围,断点等等。

之后同样是一个空白行,然后是文档的标记tag,指明一些技术上的信息,主要是最主要的是调用参数类型,返回值极其类型,继承关系,相关方法/函数等等。

文档注释中还可以使用例如<b> <code>这样的标签,详细介绍请参考附录二。
一个文档注释的例子
/**
* 函数add,实现两个数的加法
*
* 一个简单的加法计算,函数接受两个数a、b,返回他们的和c
*
* @param int 加数
* @param int 被加数
* @return integer
*/
function Add($a, $b)
{
return $a+$b;
}

生成文档如下:
Add
integer Add( int $a, int $b)
[line 45]

函数add,实现两个数的加法
Constants 一个简单的加法计算,函数接受两个数a、b,返回他们的和c
Parameters
• int $a - 加数
• int $b - 被加数
文档标记:

文档标记的使用范围是指该标记可以用来修饰的关键字,或其他文档标记。

所有的文档标记都是在每一行的 * 后面以@开头。如果在一段话的中间出来@的标记,这个标记将会被当做普通内容而被忽略掉。
@access

使用范围:class,function,var,define,module

该标记用于指明关键字的存取权限:private、public或proteced
@author

指明作者
@copyright

使用范围:class,function,var,define,module,use

指明版权信息
@deprecated

使用范围:class,function,var,define,module,constent,global,include

指明不用或者废弃的关键字
@example

该标记用于解析一段文件内容,并将他们高亮显示。Phpdoc会试图从该标记给的文件路径中读取文件内容
@const

使用范围:define

用来指明php中define的常量
@final

使用范围:class,function,var

指明关键字是一个最终的类、方法、属性,禁止派生、修改。
@filesource

和example类似,只不过该标记将直接读取当前解析的php文件的内容并显示。
@global

指明在此函数中引用的全局变量
@ingore

用于在文档中忽略指定的关键字
@license

相当于html标签中的<a>,首先是URL,接着是要显示的内容

例如<a href=”http://www.baidu.com”>百度</a>

可以写作 @license http://www.baidu.com 百度
@link

类似于license

但还可以通过link指到文档中的任何一个关键字
@name

为关键字指定一个别名。
@package

使用范围:页面级别的-> define,function,include

类级别的->class,var,methods

用于逻辑上将一个或几个关键字分到一组。
@abstrcut

说明当前类是一个抽象类
@param

指明一个函数的参数
@return

指明一个方法或函数的返回指
@static

指明关建字是静态的。
@var

指明变量类型
@version

指明版本信息
@todo

指明应该改进或没有实现的地方
@throws

指明此函数可能抛出的错误异常,极其发生的情况

上面提到过,普通的文档标记标记必须在每行的开头以@标记,除此之外,还有一种标记叫做inline tag,用{@}表示,具体包括以下几种:
{@link}

用法同@link
{@source}
显示一段函数或方法的内容

一些注释规范
a.注释必须是
/**
* XXXXXXX
*/

的形式
b.对于引用了全局变量的函数,必须使用glboal标记。
c.对于变量,必须用var标记其类型(int,string,bool...)
d.函数必须通过param和return标记指明其参数和返回值
e.对于出现两次或两次以上的关键字,要通过ingore忽略掉多余的,只保留一个即可
f.调用了其他函数或类的地方,要使用link或其他标记链接到相应的部分,便于文档的阅读。
g.必要的地方使用非文档性注释,提高代码易读性。
h.描述性内容尽量简明扼要,尽可能使用短语而非句子。
i.全局变量,静态变量和常量必须用相应标记说明

总结
phpDocumentor是一个非常强大的文档自动生成工具,利用它可以帮助我们编写规范的注释,生成易于理解,结构清晰的文档,对我们的代码升级,维护,移交等都有非常大的帮助。
关于phpDocumentor更为详细的说明,可以到它的官方网站

两个例子:
实例一
实例二

PHP 相关文章推荐
图书管理程序(一)
Oct 09 PHP
第三章 php操作符与控制结构代码
Dec 30 PHP
php的$_FILES的临时储存文件与回收机制实测过程
Jul 12 PHP
PHP微框架Dispatch简介
Jun 12 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
php经典算法集锦
Nov 14 PHP
PHP对象相关知识总结
Apr 09 PHP
PHP简单装饰器模式实现与用法示例
Jun 22 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 21 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 PHP
关于PHPDocument 代码注释规范的总结
Jun 25 #PHP
解析php中获取系统信息的方法
Jun 25 #PHP
解析PHP对现有搜索引擎的调用
Jun 25 #PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 #PHP
解析如何修改phpmyadmin中的默认登陆超时时间
Jun 25 #PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 #PHP
使用Sphinx对索引进行搜索
Jun 25 #PHP
You might like
PHP中GET变量的使用
2006/10/09 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
用Python编程实现语音控制电脑
2014/04/01 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
python实现推箱子游戏
2020/03/25 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
python的链表基础知识点
2020/09/13 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
计算机大学生的自我评价
2013/10/15 职场文书
护理专业自荐信
2013/12/03 职场文书
社区禁毒工作方案
2014/06/02 职场文书
部队个人年终总结
2015/03/02 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
工作一年自我鉴定
2019/06/20 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS