PHPDoc
Encyclopedia
PHPDoc is an adaptation of Javadoc
Javadoc
Javadoc is a documentation generator from Sun Microsystems for generating API documentation in HTML format from Java source code.The "doc comments" format used by Javadoc is the de facto industry standard for documenting Java classes. Some IDEs, such as Netbeans and Eclipse automatically generate...

 for the PHP
PHP
PHP is a general-purpose server-side scripting language originally designed for web development to produce dynamic web pages. For this purpose, PHP code is embedded into the HTML source document and interpreted by a web server with a PHP processor module, which generates the web page document...

 programming language
Programming language
A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that control the behavior of a machine and/or to express algorithms precisely....

. It is a formal standard for commenting
Comment (computer programming)
In computer programming, a comment is a programming language construct used to embed programmer-readable annotations in the source code of a computer program. Those annotations are potentially significant to programmers but typically ignorable to compilers and interpreters. Comments are usually...

 PHP code. It allows external document generators like phpDocumentor
PhpDocumentor
phpDocumentor is an open source documentation generator written in PHP. It automatically parses PHP source code and produces readable API and source code documentation in a variety of formats. phpDocumentor generates documentation based on PHPDoc-formatted comments and the structure of the source...

 to generate documentation of APIs
Application programming interface
An application programming interface is a source code based specification intended to be used as an interface by software components to communicate with each other...

 and helps some IDEs
Integrated development environment
An integrated development environment is a software application that provides comprehensive facilities to computer programmers for software development...

 such as Zend Studio
Zend Studio
Zend Studio is a commercial, proprietary integrated development environment for PHP developed by Zend Technologies, based on the PHP Development Tools plugin for the Eclipse platform ....

, NetBeans
NetBeans
NetBeans refers to both a platform framework for Java desktop applications, and an integrated development environment for developing with Java, JavaScript, PHP, Python, Groovy, C, C++, Scala, Clojure, and others...

, JetBrains PhpStorm
PhpStorm
JetBrains PhpStorm is a commercial IDE for PHP built on JetBrains' IntelliJ IDEA platform.PhpStorm provides intelligent editor for PHP code, HTML and JavaScript with on-the-fly code analysis and automated refactoring for PHP and JavaScript code. Code completion supports PHP 5.3 including namespaces...

, ActiveState Komodo Edit and IDE
ActiveState Komodo
Komodo Edit is a highly regarded free text editor for dynamic programming languages. Introduced in January 2007, with the release of version 4.3, Komodo Edit is built on top of the Open Komodo project...

 and Aptana Studio
Aptana
Aptana, Inc. is a company making web application development tools for Web 2.0 and Ajax for use with programming languages such as JavaScript, Ruby, PHP and Python. Aptana's main products are Aptana Studio, Aptana Cloud and Aptana Jaxer...

 to interpret variable types and other ambiguities in the loosely typed language and to provide improved code completion, type hinting and debugging.

PHPDoc supports documentation of both object-oriented and procedural
Procedural programming
Procedural programming can sometimes be used as a synonym for imperative programming , but can also refer to a programming paradigm, derived from structured programming, based upon the concept of the procedure call...

code.

DocBlock

A DocBlock is an extended C++-style PHP comment that begins with "/**" and has an "*" at the beginning of every line. DocBlocks precede the element they are documenting. Any line within a DocBlock that doesn't begin with a * will be ignored.

To document function "foo", place the DocBlock immediately before the function declaration:


/**
* This is a DocBlock comment
*/
function foo
{
}


This example will apply the DocBlock to "define('me',2);" instead of to "function foo":


/**
* DocBlock for function foo?
*
* No, this will be for the constant me!
*/
define('me',2);
function foo($param = me)
{
}


define statements, functions, classes, class methods, and class vars, include statements, and global variables can all be documented, see Elements of the source code that can be documented

A DocBlock contains three basic segments in this order:
  • Short Description
  • Long Description
  • Tags


The Short Description starts on the first line, and can be terminated with a blank line or a period. A period inside a word (like example.com or 0.1 %) is ignored. If the Short Description would become more than three lines long, only the first line is taken. The Long Description continues for as many lines as desired and may contain HTML markup for display formatting. Here is a sample DocBlock with a Short and a Long Description:


/**
* 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.
*/


Optionally, you may enclose all paragraphs in a <p></p> tag. Be careful, if the first paragraph does not begin with <p>, phpDocumentor will assume that the DocBlock is using the simple double linebreak to define paragraph breaks as in:


/**
* Short desc
*
* Long description first sentence starts here
* and continues on this line for a while
* finally concluding here at the end of
* this paragraph
*
* The blank line above denotes a paragraph break
*/


Here is an example of using <p>


/**
* Short desc
*
*

Long description first sentence starts here
* and continues on this line for a while
* finally concluding here at the end of
* this paragraph


* This text is completely ignored! it is not enclosed in p tags
*

This is a new paragraph


*/


phpDocumentor also supports JavaDoc's DocBlock format through the command-line option -j, --javadocdesc. Due to the non-XHTML compliant unmatched p tag, it is highly recommend to avoid this syntax whenever possible


/**
*


* 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:
*


* The p above denotes a paragraph break
*/


phpDocumentor will convert all whitespace into a single space in the long description, use paragraph breaks to define newlines, or <pre>, as discussed in the next section.

DocBlock Description Details

In some parsers the long and short description of a DocBlock is parsed for a few select HTML tags that determine additional formatting. Because not all HTML is allowed, they will generally be converted into plain text or more content specific tags. For example, a <b> tag may be converted into <emphasis> in DocBook.

Here is a list of tags supported by 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>".

Using <code> and <pre>

Both <code> and <pre> ignore any HTML listed above (except for their closing tags).

DocBlock Templates

The purpose of a DocBlock template is to reduce redundant typing. For instance, if a large number of class variables are private, one would use a DocBlock template to mark them as private. DocBlock templates simply augment any normal DocBlocks found in the template block.

A DocBlock template is distinguished from a normal DocBlock by its header. Here is the most basic DocBlock template:


/**#@+
*
*/


The text that marks this as a DocBlock template is "/**#@+" - all 6 characters must be present. DocBlock templates are applied to all documentable elements until the ending template marker:


/**#@-*/


Note that all 8 characters must appear as "/**#@-*/" in order for phpDocumentor to recognize them as a template.

Page-level DocBlocks

A page-level DocBlock is the only DocBlock that cannot precede the element that it is documenting, as there is no way to precede a file. To solve this issue, the way phpDocumentor finds a page-level DocBlock is to parse the first DocBlock in a file as the page-level DocBlock, with certain conditions.


/**
* Page-level DocBlock
*/
define('oops','Page-level DocBlock it is not!');
?>


This last example has one DocBlock, and it is the first DocBlock in a file, but it is not a Page-level DocBlock. How can phpDocumentor tell the difference between a Page-level DocBlock and any other DocBlock? Simple:


/**
* Pretend this is a file
*
* Page-level DocBlock is here because it is the first DocBlock
* in the file, and contains a @package tag
* @package pagepackage
*/
define("almost","Now the Page-level DocBlock is for the page, and the Define has no docblock");
?>


In phpDocumentor version 1.2.2, a Page-level DocBlock is the first DocBlock in a file if it contains a @package tag. However, this example will raise a warning like WARNING in test.php on line 8: Page-level DocBlock precedes "define almost", use another DocBlock to document the source element. You can eliminate the warning by adding documentation to the define as follows:


/**
* Page-level DocBlock
* @package pagepackage
*/
/**
* Define DocBlock
*/
define("ahhhh","Now the Page-level DocBlock is for the page, and the Define DocBlock for the define");
?>


Now, the page has its documentation, and the define has its own documentation.

So, a DocBlock is a page-level DocBlock IF AND ONLY IF it is both:
  1. The first DocBlock in a file
  2. Either:
    1. Contains a @package tag, or
    2. Is immediately followed by another DocBlock for any documentable PHP element (this is deprecated, always use a @package tag)


A Page-level DocBlock may have any of the standard phpDocumentor Tags (see Standard phpDocumentor Tags) plus the following tags:
  • @package
  • @subpackage


phpDocumentor will not document a file like the first example, there must be at least one documentable PHP element in the file.

Tags

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 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 phpdoc.de compatibility
@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 element Documents an association to any element (global variable, include, page, class, function, define, method, variable).
@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.


In addition, some parsers allow two additional inline tags: {@id}, used to allow direct linking to sections in a tutorial, and {@toc}, used to generate a table of contents from {@id}s in the file. Think of {@id} like an <a name="idname"> HTML tag as it serves the same function.

For more in depth discussion of PHPDoc tags, see http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.pkg.html

Packages

To understand the role of packages and how to use @package, it is important to know the logic behind packaging in PHP. The quest for structured programming led to the invention of functions, then classes, and finally packages. Traditionally, a re-usable software module was a collection of variables, constants and functions that could be used by another software package. PHP is an example of this model, as there are many extensions that consist of constants and functions like the tokenizer extension. One can think of the tokenizer extension as a package: it is a complete set of data, variables and functions that can be used in other programs. A more structured format of this model is of course objects, or classes. A class contains variables and functions. A single class packages together related functions and variables to be re-used.

phpDocumentor defines package in two ways:
  • Functions, Constants and Global Variables are grouped into files (by the filesystem), which are in turn grouped into packages using the @package tag in a page-level DocBlock
  • Methods and Class Variables are grouped into classes (by PHP), which are in turn grouped into packages in a Class DocBlock


These two definitions of package are exclusive. In other words, it is possible to have classes of a different package of the file that contains it.
The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK