https://zh.wikipedia.org/wiki/PHPDoc

PHPDoc 是一个 PHP 版的 Javadoc。它是一种注释 PHP 代码的正式标准。它支持通过类似 phpDocumentor 这样的外部文档生成器生成 API 文档,也可以帮助一些例如 Zend Studio,NetBeansActiveState Komodo Edit and IDE 和 Aptana Studio 之类的 集成开发环境 理解变量类型和弱类型语言中的其他歧义并提供改进的代码完成,类型提示和除错功能。

PHPDoc 可同时支持 面向对象 的和 面向过程的 代码。

文档块(DocBlock)[编辑]

文档块是一种扩展了 C++ 风格的 PHP 注释,它以 "/**" 开始,并在每一行的行首有一个 "*" 。文档块 DocBlocks 位于被注释区域的前面,在文档块中,任何不以 * 开始的行将被忽略。

要注释 "foo()",请将文档块放在紧挨着函数声明的前面

/**
* 这是一个文档块注释
*/
function foo()
{
}

下面的例子将会应用文档块到 "define('me',2);",而不是 "function foo()":

/**
* 函数 foo 的文档块?
*
* 不对,这是常量 me 的!
*/
define('me',2);
function foo($param = me)
{
}

define() 语句,函数,类,类方法,类变量,include() 语句和全局变量都可以被文档化。see Elements of the source code that can be documented

一个文档块通常会以如下的顺序包含三个基本片段:

  • 短介绍
  • 长描述
  • 标签(Tags)

短介绍开始于第一行,以一个空行或一个句号(这里是指英文句号,下同)结束。单词中的句号(例如 example.com 或 0.1%)会被忽略。如果短介绍长度超过三行,则只有第一行有效。而长描述则以任意多行继续,而且可以包含 用于格式化显示的 HTML 标记。下面是一个带有短介绍和长描述的文档块:

/**
* return the date of Easter
*
* Using the formula from "Formulas that are way too complicated for anyone to
* ever understand except for me" by Irwin Nerdy, this function calculates the
* date of Easter given a date in the Ancient Mayan Calendar, if you can also
* guess the birthday of the author.
*/

另外,你还可以把所有段落放在一对 <p></p> 标签中。要小心,如果第一段没有以一个 <p> 开头,phpDocumentor 将会假设文档块只是像下面这样使用简单的双换行符定义段落分割:

/**
* 短介绍
*
* 长描述中的第一句开始于此,
* 然后在这一行继续,
* 最后在这一段的
* 末尾结束
*
* 上面的空行表示一个新的段落分割
*/

这儿是一个使用 <p> 的例子:

/**
* 短介绍
*
* <p>长描述中的第一句开始于此,
* 然后在这一行继续,
* 最后在这一段的
* 末尾结束</p>
* 这一行将被完全忽略!它并没有包含在 p 标签中
* <p>这是一个新的段落</p>
*/

通过命令行选项 -j, --javadocdesc,phpDocumentor 也可以支持 JavaDoc 的文档块格式。由于不匹配的 p 标签不兼容 XHTML 标准,我们强烈建议你尽可能避免使用这种语法。

/**
* <p>
* Short desc is only to the first period.
* This means a sentence like:
* "Parses Mr./Mrs. out of $_GET." will
* parse a short description of "Parses Mr."
* which is rather silly. Long description is
* the entire DocBlock description including the
* Short desc, and paragraphs begin where p is like:
* <p>
* The p above denotes a paragraph break
*/

phpDocumentor 会将长描述中所有的空白转换为单个空格。请使用断行定义新行,或者使用下一节中讨论的 <pre> 。

文档块描述细节[编辑]

在有的解析器中,文档块中的若干 HTML 标签可能会被解析以显示特定的信息。由于并非所有的HTML标签都是允许使用的,它们有可能被转换为普通文本或更加视具体内容而定的表情。例如,一个 <b> 标签可能会被转换为 <emphasis> 。

下面是 phpDocumentor 所支持的标签列表:

  • <b> -- emphasize/bold text
  • <code> -- Use this to surround php code, some converters will highlight it
  • <br> -- hard line break, may be ignored by some converters
  • <i> -- italicize/mark as important
  • <kbd> -- denote keyboard input/screen display
  • <li> -- list item
  • <ol> -- ordered list
  • <p> -- If used to enclose all paragraphs, otherwise it will be considered text
  • <pre> -- Preserve line breaks and spacing, and assume all tags are text (like XML's CDATA)
  • <samp> -- denote sample or examples (non-php)
  • <ul> -- unordered list
  • <var> -- denote a variable name

For the rare case when the text "<b>" is needed in a DocBlock, use a double delimiter as in <<b>>. phpDocumentor will automatically translate that to the physical text "<b>".

使用 <code> 和 <pre>[编辑]

<code> 和 <pre> 中的内容会忽略上述列表中的任何 HTML 标签。(当然,它们自己对应的关闭标签除外)

文档块模板[编辑]

文档块模板的目的是缩减重复的输入。例如,如果有大量的类成员变量是私有的,我们可以使用一个文档块模板标记它们的属性为私有。文档块模板就是简单地扩充了其中的普通文档块。

一个文档块模板是通过它头部的一个普通文档块识别的。下面是一个最基本的文档块模板:

/**#@+
*
*/

将其标记为一个文档块模板的文本是 "/**#@+" - 嗯,6个字符都是必须存在的。文档块模板会一直应用到所有的可文档化的元素,直到出现模板结束标记:

/**#@-*/

注意,所有的8个字符必须呈现为 "/**#@-*/" ,这样 phpDocumentor 才会将其识别为一个模板。

页面级的文档块[编辑]

页面级的文档块是唯一一种无法把自己放在被注释元素之前的文档块。因为没有办法将注释放在一个文件的前面(非文档内容的前面)。为了解决这个问题,phpDocumentor 的方式是将一个文件中出现的符合某些条件的第一个文档块作为页面级文档块。

<?php
/**
* 页面级文档块
*/
define('oops','不,它不是页面级文档块');
?>

上面的例子中有一个文档块,而且它是文件中出现的第一个文档块,但它不是一个页面级文档块。那么 phpDocumentor 是怎样区分页面级文档块和其他文档块的呢?简单:

<?php
/**
* Pretend this is a file
*
* 这个是页面级文档块,因为它是文件中出现的第一个文档块,而且含有 @package 标签
* @package pagepackage
*/
define("almost","差不多了,这个页面级文档块是属于这个页面的,而这条 define 语句并没有文档块");
?>

在 1.2.2 版的 phpDocumentor 中,页面级的文档块就是文件中出现的第一个含有 @package 标签的文档块。然而,这个例子将会导致一个 WARNING 错误:Page-level DocBlock precedes "define almost", use another DocBlock to document the source element. 你可以通过在文档中对 define 语句添加类似下面的注释避免这个 WARNING:

<?php
/**
* 页面级文档块
* @package pagepackage
*/
/**
* Define 文档块
*/
define("ahhhh","哈哈,现在,页面级文档块属于这个页面,“Define 文档块” 属于 define 语句");
?>

现在,页面级文档块属于这个页面,而 define 语句也有了自己的文档块。

So, 一个文档块仅在同时符合以下条件时,它才是一个页面级文档块:

  1. 文件中出现的第一个文档块
  2. 同时:
    1. 包含一个 @package 标签,或者
    2. 立即跟上另一个其他 PHP 元素的文档块 (不推荐使用这种方式, 最好总是使用 @package 标签)

一个页面级文档块可以含有所有的普通 phpDocumentor 标签,以及下列标签:

  • @package
  • @subpackage

phpDocumentor 不会文档化像第一个例子中的文件,文件中必须有至少一个可文档化的 PHP 元素。

标签[编辑] //经常用到很重要

Tags are single words prefixed by a "@" symbol. Tags inform parsers how to present information and modify display of documentation as well as allow the IDE to define variable types. All tags are optional, but if you use a tag, they do have specific requirements to parse properly.

Common tags
Tag Usage Description
@abstract   Documents an abstract class, class variable or method.
@access public, private or protected Documents access control for an element. @access private indicates that documentation of element be prevented.
@author author name <author@email> Documents the author of the current element.
@copyright name date Documents copyright information.
@deprecated version Documents a method as deprecated.
@deprec   same as @deprecated
@example /path/to/example Documents the location of an external saved example file.
@exception   documents an exception thrown by a method — also see @throws.
@global type $globalvarname Documents a global variable or its use in a function or method.
@ignore   Prevents the documentation of an element
@internal   private information for advanced developers
@link URL  
@name global variable name Specifies an alias for a variable. For example, $GLOBALS['myvariable'] becomes $myvariable
@magic   phpDocumentor tags}-].
@package name of a package Documents a group of related classes and functions.
@param type [$varname] description  
@return type description This tag should not be used for constructors or methods defined with a void return type.
@see   Documents an association to another method or class.
@since version Documents when a method was added to a class.
@static   Documents a static class or method
@staticvar   Documents a static variable's use in a function or class
@subpackage    
@throws   Documents an exception thrown by a method.
@todo   Documents things that need to be done to the code at a later date.
@var type a data type for a class variable
@version   Provides the version number of a class or method.

PHPDoc 学习记录的更多相关文章

  1. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  2. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  3. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  4. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

  5. UWP学习记录11-设计和UI

    UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...

  6. UWP学习记录10-设计和UI之控件和模式7

    UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...

  7. UWP学习记录9-设计和UI之控件和模式6

    UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...

  8. UWP学习记录8-设计和UI之控件和模式5

    UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...

  9. UWP学习记录7-设计和UI之控件和模式4

    UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中 ...

随机推荐

  1. 使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行

    使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行 前几天项目中有一个图表的是用echart生成的,遇到一个问题,就是在手机端显示的售时候,如果文字太长就会超出div,之前的 ...

  2. Delphi 的TStringBuilder防止服务器内存碎片化

    Delphi 2009+ 的 System.SysUtils提供了一个类似.Net的StringBuilder,用于存储字符数组. 很多人不明白为什么要用TStringBuilder, Delphi中 ...

  3. 笔记本电脑、VM虚拟机、开发板三者网线连接互ping

    笔者在做NFS挂接练习时,发现网上的资料大部分是笔记本电脑(以下简称PC)和虚拟机PING.PC和开发板PING,这样的方式不是我想要的.笔者需要使用无线网卡上网,使用有线网卡进行三者互PING.在开 ...

  4. SDR软件无线电知识要点(一)噪声系数与噪声因子

    SDR软件无线电知识要点(一)噪声系数与噪声因子 信号质量如何评估 Noise Figure (NF) or sensitivity and Error Vector Magnitude (EVM) ...

  5. D3.js和three.js

    D3.js是一个数据可视化的库,看看他们的DEMO就可以知道,技术基础是SVG.兼容性是IE9+. three.js是以webgl为基础的库,封装了一些3D渲染需求中重要的工具方法与渲染循环.

  6. 20155301 Makefile和MyOD和共享库

    20155301 Makefile和MyOD和共享库 Makefile 作用:make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序. 我们要写一个Mak ...

  7. 20155301 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20155301 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 步骤:打开cmd,建立 ...

  8. 20155328 2016-2017-2 《Java程序设计》第三周学习总结

    20155328 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 类是对象的设计图,对象是类的实例.用class定义类,用new新建一个对象. 一个原始码中可 ...

  9. 每天一个linux命令(1):ln 命令

    每天一个linux命令(35):ln 命令 ln 是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在 每一 ...

  10. 北京Uber优步司机奖励政策(4月17日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...