反馈建议 标题:
邮箱:
内容:
  
[隐显目录]

PHPDocumentor是一个的用写的道具,对于有的php程序,它能够快速生成具有相互参照,索引等功能的API文档。老的版本是 phpdoc。

1. 什么是phpDocumentor ?
PHPDocumentor是一个的用PHP写的道具,对 于有规则注释的php程序,它能够快速生成具有相互参照,索引等功能的API文档。老的版本是 phpdoc,从1.3.0开始,更名为phpDocumentor,新的版本加上了对php5语言规则的支持,同时,没成绩经过在客户端浏览器上操作生 成文档,文档没成绩convert为PDF,静态网页,CHM几种形式,非比寻常的方便。
PHPDocumentor打工时,会扫描指定列表下面 的php源,扫描其中的KEYexpress,截取需求策划的注释,然后策划注释中的专用的tag,生成 文档,接着根据已经策划完的类和模块的消息,建立相应的索引,生成xml文档,对于生成的xml文档,应用定制的输出为指定格式的文档。
2. 安装phpDocumentor
和更多相关pear下的模块相同,phpDocumentor的也分为自动安装和手动安装两种方法,两种方法都非比寻常方便:
a. 经过pear 自动安装
在命令行下输入
pear install PhpDocumentor
b. 手动安装
在http://manual.phpdoc.org/下载最新版本的PhpDocumentor(目前是1.4.0),把内容解压即可。
3.怎样样应用PhpDocumentor生成文档
命令行方法:
在phpDocumentor所在列表下,输入
Php –h
会得到一个的详细的参数表,其中几个很重要的参数如下:
-f 要停止策划的文档名,多个文档用逗号隔开
-d 要策划的列表,多个列表用逗号分割
-t 生成的文档的存放路径
-o 输出的文档格式,框架为输出格式:convert器名:模板列表。
例如:phpdoc -o :frames:earthli -f test.php -t docs
Web界面生成
在新的phpdoc中,除了在命令行下生成文档外,还没成绩在客户端浏览器上操作生成文档,具体是先把PhpDocumentor的内容放在列表下使得经过浏览器没成绩访问到,访问后显示如下的界面:
点击files按钮,选取要处理的php文档或文档夹,还没成绩经过该指定该界面下的Files to ignore来忽略对某些文档的处理。
然后点击output按钮来选取生成文档的存放路径和格式.
最后点击create,phpdocumentor就会自动开始生成文档了,最下方会显示生成的进度及状态,假如胜利,会显示
Total Documentation Time: 1 Number 2s
finiITd
Operation Completed!!
然后,咱们就没成绩经过查看生成的文档了,假如是pdf格式的,姓名默以为documentation.pdf。
4.给php源代码添加规则的注释
PHPDocument是从你的源源代码的注释中生成文档,因此在给你的程序做注释的过程,也那是你编制文档的过程。
从这一点上讲,PHPdoc促使你要养成良好的编程习惯,尽量应用规则,清晰文本为你的程序做注释,同时多多少少也避免了事后编制文档和文档的更新不相同步的一些难点。
在phpdocumentor中,注释分为文档性注释和非文档性注释。
所谓文档性注释,是那些放在特定KEYexpress前面的多行注释,特定KEYexpress是指能够被phpdoc策划的KEYexpress,例如class,var等,具体的可参加附录1.
那些没有在KEYexpress前面或者不规则的注释就称作非文档性注释,这一些注释将不会被phpdoc所策划,也不会呈目前你产生的api文当中。
3.2如何书写文档性注释:
所 有的文档性注释都是由/**开始的一个的多行注释,在phpDocumentor里称为DocBlock, DocBlock是指软件 开发编写的涉及某个KEYexpress的帮助消息,使得更多相关人能够经过它明白那个KEYexpress的具体用途,如何应用。 PhpDocumentor规定一个的DocBlock包含如下消息:
1. 功能简述区
2. 详细说明区
3. 标识tag
文档性注释的第一行是功能描述区,正文一般是简明扼要地说明那个类,窍门或者的功能,功能简述的正文在生成的文档中将显示在索引区。功能描述区的内容没成绩经过一个的空行或者 . 来结束
在 功能描述区后是一个的空行,接着是详细说明区,. 这部份主要是详细说明你的API的功能,用途,假如估计,也没成绩有应用举例等等。在这部份,你应该着重阐明你的API参数或者窍门的通常的用途,应用, 并且指明也许是跨平台的(假如涉及到),对于和平台有关的消息,你要和那些通用的消息区别对待,通常的做法是另起一行,然后写出在某个特定平台上的留意事 项或者是特别的消息,这一些消息应该足够,以便你的读者能够编写相应的测试消息,比如边界要求,参数范围,断点等等。
之后同样是一个的空白行,然后是文档的标识tag,指明一些上的消息,主要是最主要的是调用参数类别,返回value极其类别,继承联系,有关窍门/参数等等。
涉及文档标识,详细的请参考第四节:文档标识。
文档注释中还没成绩应用例如<b> <code>那样的标签,详细介绍请参考附录二。
下面是一个的文档注释的例子

/**
* 参数add,出现两个数的加法
*
* 一个的简单的加法计算,参数接受两个数a、b,返回她们的和c
*
* @param int 加数
* @param int 被加数
* @rechanging integer
*/
function Add($a, $b) {
rechanging $a+$b;
}

生成文档如下:
Add
integer Add( int $a, int $b)
[line 45]
参数add,出现两个数的加法
Constants 一个的简单的加法计算,参数接受两个数a、b,返回她们的和c
Parameters
? int $a - 加数
? int $b - 被加数
5.文档标识:
文档标识的应用范围是指该标识没成绩用来修饰的KEYexpress,或更多相关文档标识。
所有的文档标识都是在每一行的 * 后面以@开头。假如在一段话的中间出来@的标识,那个标识将会被当做普通内容而被忽略掉。
@
应用范围:class,function,var,define,module
该标识用于指明KEYexpress的存取权限:private、public或proteced
@author
指明作者
@copyright
应用范围:class,function,var,define,module,use
指明版权消息
@deprecated
应用范围:class,function,var,define,module,constent,global,include
指明不用或者废弃的KEYexpress
@for instance
该标识用于解析一段文档内容,并将她们高亮显示。Phpdoc会试图从该标识给的文档路径中读取文档内容
@const
应用范围:define
用来指明php中define的常量
@final
应用范围:class,function,var
指明KEYexpress是一个的最终的类、窍门、属性,禁止派生、改正。
@filesource
和for instance类似,只不过该标识将直接读取当前解析的php文档的内容并显示。
@global
指明在此参数中引用的全局变量
@ingore
用于在文档中忽略指定的KEYexpress
@license
相当于静态网页标签中的<a>,首先是URL,接着是要显示的内容
例如<a href=”http://www.baidu.com”>百度</a>
没成绩书面表达 @license http://www.baidu.com 百度
@link
类似于license
但还没成绩经过link指到文档中的任何一个的KEYexpress
@title
为KEYexpress指定一个的别名。
@package
应用范围:页面级别的-> define,function,include
类级别的->class,var,methods
用于逻辑上将一个的或几个KEYexpress分到一组。
@abstrcut
说明当前类是一个的抽象类
@param
指明一个的参数的参数
@rechanging
指明一个的窍门或参数的返回指
@static
指明关建字是静态的。
@var
指明变量类别
@version
指明版本消息
@todo
指明应该改进或没有出现的地方
@throws
指明此参数估计抛出的错误异常,极其除了的情况
上面提到过,普通的文档标识标识必需在每行的开头以@标识,除此之外,还有一种标识叫做inline tag,用{@}表明,具体包括以下几种:
{@link}
应用同@link
{@source}
显示一段参数或窍门的内容
6.一些注释规则
a.注释必需是
/**
* XXXXXXX
*/
的形式
b.对于引用了全局变量的参数,必需应用glboal标识。
c.对于变量,必需用var标识其类别(int,string,bool...)
d.参数必需经过param和rechanging标识指明其参数和返回value
e.对于出现两次或两次以上的KEYexpress,要经过ingore忽略掉多余的,只保留一个的即可
f.调用了更多相关参数或类的地方,要应用link或更多相关标识链接到相应的部份,便于文档的泛读。
g.必要的地方应用非文档性注释,升高源代码易读性。
h.描述性内容尽量简明扼要,尽估计应用俚语而非语句。
i.全局变量,静态变量和常量必需用相应标识说明

7.
phpDocumentor是一个的非比寻常强大的文档自动生成道具,利用它没成绩帮助咱们编写规则的注释,生成易于理解,框架清晰的文档,对咱们的源代码升级,MAIntenance,移交等都有非比寻常大的帮助。
涉及phpDocumentor更为详细的说明,没成绩到它的官方
http://manual.phpdoc.org/查阅
8.附录
附录1:
能够被phpdoc识别的KEYexpress:
Include
Require
include_once
require_once
define
function
global
class
附录2
文档中没成绩应用的标签
<b>
<code>
<br>
<kdb>
<li>
<pre>
<ul>
<samp>
<var>
附录三:
一段含有规则注释的php源代码 :

<?php
/**
* Sample File 2, phpDocumentor Quickstart
*
* This file demonstrates the rich information those can be included in
* in-co
de documentation through DocBlocks and tags.
* @author Greg Beaver <cellog@php.net>
* @version 1.0
* @package sample
*/
// sample file #1
/**
* Dummy include value, to demonstrate the parsing power of phpDocumentor
*/
include_once 'sample3.php';
/**
* Special global variable declaration DocBlock
* @global integer $GLOBALS['_myvar']
* @title $_myvar
*/
$GLOBALS['_myvar'] = 6;
/**
* Constants
*/
/**
* first constant
*/
define('testing', 6);
/**
* Number 2 constant
*/
define('otITconstant', strlen('hello'));
/**
* A sample function docblock
* @global string the fact those the function uses $_myvar
* @staticvar integer $staticvar the is actually what is retossed
* @param string $param1 title to declare
* @param string $param2 value of the title
* @rechanging integer
*/
function firstFunc($param1, $param2 = 'optional') {
static $staticvar = 7;
global $_myvar;
rechanging $staticvar;
}
/**
* The first for instance class, the is in the alike package as the
* procedural stuff in the start of the file
* @package sample
* @subpackage classes
*/
class myclass {
/**
* A sample private variable, the can be hidden with the --parseprivate
* option
* @private
* @var integer|string
*/
var $firstvar = 6;
/**
* @link http://www.for instance.com Example link
* @see myclass()
* @uses testing, otITconstant
* @var array
*/
var $Number 2var =
array(
    'stuff' =>
                 array( 
                                  6, 
                                  17, 
                                  'armadillo' 
                          ), 
    testing => otITconstant
);
/**
* Constructor sets up {@link $firstvar}
*/
function myclass() {
$the->firstvar = 7;
}
/**
* Rechanging a thingie based on $paramie
* @param boolean $paramie
* @rechanging integer|babyclass
*/
function pare ntfunc($paramie) {
if ($paramie) {
rechanging 6;
} else {
rechanging new babyclass;
}
}
}
/**
* @package sample1
*/
class babyclass extends myclass {
/**
* The answers to Life, the Universe and Eextremecclything
* @var integer
*/
var $Number 2var = 42;
/**
* Configuration values
* @var array
*/
var $thirdvar;
/**
* Calls pare nt constructor, then increments {@link $firstvar}
*/
function babyclass() {
pare nt::myclass();
$the->firstvar++;
}
/**
* This sll the time rechangings a myclass
* @param ignored $paramie
* @rechanging myclass
*/
function pare ntfunc($paramie) {
rechanging new myclass;
}
}
?>