Как стать автором
Обновить

Создание документации на основе PhpDocumentor или немного про комментирование кода

PhpDocumentor автоматически генерирует из исходного кода документацию. Поэтому скрипт покажет лучший вариант только при правильном построении комментариев, именно это мы и разберем в первую очередь.



Описание функций, методов, файлов и переменных



Описание идёт таким образом:
/**
* Краткое описание
*
* Подробное описание
* которое возможно в несколько строк
*
* @тег значение
*/


Сразу пример, который далее мы немного разберём.

file1.php
<?php
/**
* Файл примера правильного документирования
*
* Здесь я постараюсь использовать
* максимально много тегов
* @author Lion__ <moderation@mail.ua>
* @version 1.0
* @package files
*/

/**
* Подключаем файл
*/
include_once 'file2.php';

/**
* Просто класс
* @package files
* @subpackage classes
*/
class Test2 extends Test {

/**
* Получение значения с {@link $data}
* @uses Test::data Переменная, с неё мы берём данные
* @return void
*/
function getdata()
{
$this->data = $data;
}
}
/**
* Тестовая переменная
*
* Дело в том что обычную переменную нельзя описать
* @global Test $GLOBALS['a']
* @name $a
*/
$GLOBALS['a'] = new Test;

/**
* Обычная функция
* @global Test показываем что мы используем глобальную переменную $a
* @staticvar string $var Эту переменную мы будем возвращать
* @param string $param1 Первый параметр функции
* @param string $param2 Второй параметр
* @return string
*/
function func($param1, $param2 = 'value')
{
static $var = 7;
global $a;
return $var;
}

/**
* Константа
*/
define('testing', 6);
?>


file2.php
<?php
/**
* Второй файл примера правильного документирования
*
* @author Lion__ <moderation@mail.ua>
* @version 1.0
* @package files
*/

/**
* Просто класс
* @package files
* @subpackage classes
*/
class Test {
/**
* Переменная хранящая значение типа integer
* @link _ttp://www.example.com Подробное описание. Вместо _ должно быть h
* @see setdata
* @access private
* @var integer
*/
var $data;

/**
* Установка значения
* @param integer $data Значение для установки в {@link $data}
* @uses Test::$data Для размещения данных
* @return void
*/
function setdata($data)
{
$this->data = $data;
}
}


Описание примера


Разбирать местоположение комментариев мы не будем, рассмотрим саму структуру.

  • Краткое описание
  • Полное описание. Может использоваться по желанию
  • Теги

С первым и вторым всё ясно. С третьем давайте подробнее.

@package Название
Логически объединяет файлы, классы, методы и тд. Долно быть сделано с умом или вообще не сделано. В PhpDocumentor возможно потом просматривать подобно категориям на сайте

@subpackage Название
Аналогично>return, но действует как подгруппа.

global [private | protected | public]
Доступ к элементу

access Текст
Автор элемента

version Текст
Версия

copyright Текст
Копирайты. Думаю всё ясно.

@category Название
Используется для организации групп. Полезно если портируете в XML формат, иначе смысла нет.

example Сылка|Путь
Ссылка или путь на пример работы

author тип $переменная
Наверное самый интересный тег. Дело в том что PhpDocumentor не анализирует глобальные переменные, этим тегом мы их задаём вручную. В примере можно увидеть как они задаются, и используются( функция func )

global
Игнорирование элемента. Иногда удобно.

@license Url
Ссылка на лицензию

link URL Описание ссылка
Формирование ссылки

see Тип Описание
Используется только для переменных класса

name $Имя
Используется в связки с>@ignore. Для идентификации.

<b param Тип $переменная Описание
Параметр, как объяснить не знаю, смотрите пример. Тип может быть любой: тип PHP, имя класса, или mixed

@package Тип
Тип возвращаемой ф-цией. Если ничего не возвращает прописывается void

var file.ext|elementname|class::methodname()|class::$variablename|functionname()|functionname
Формирует ссылку на объект который указан

<b @staticvar Тип или mixed
Иногда в функциях мы задаём статические переменные. Этот тег служит для их описания

todo Текст
Используется для описание идей которые ещё небыли воплощены в реальность.

uses file.ext|elementname|class::methodname()|class::$variablename|functionname()|functionname
Аналогичен see. Или я просто не увидел различия…

Так же хотел отметить что в описаниях возможно использовать теги example, tutorial, link. Задаются они так: {@тег параметр}

Вот и всё… С комментариями разобрались, можно приступать к создании документации.

Создание документации



Переходим сюда и качаем PhpDocumentor.

Распаковываем.

Открываем phpdoc.bat:
Находим:
SET phpCli=
Путь заменяем на местоположение файла php.exe

Не знаю как будет у Вас, но у меня половина css файлов имела формат cs, а png — pn, из-за этого в корне phpDocumentor создаём файл rename.bat, в который вписываем:
@Echo Off
for /f "tokens=1,2" %%a in ('dir /s /b *.cs') do ren %%a %%~nxas
for /f "tokens=1,2" %%a in ('dir /s /b *.pn') do ren %%a %%~nxag
for /f "tokens=1,2" %%a in ('dir /s /b *.tp') do ren %%a %%~nxal
@pause


Идём в папку user, в которой создаём файл myconf.ini, в нём будет наша конфигурация к phpDocumentor:
[Parse Data]
title = Название документации
hidden = false
parseprivate = on
javadocdesc = on
defaultpackagename = Главная
target = Исходящая директория
directory = Входящая директория
output=HTML:frames:default,HTML:frames:l0l33t,HTML:frames:phpdoc.de,HTML:frames:phphtmllib,HTML:frames:earthli,HTML:frames:DOM/default,HTML:frames:DOM/l0l33t,HTML:frames:DOM/phpdoc.de,HTML:frames:DOM/phphtmllib,HTML:Smarty:PHP
sourcecode=on


Возвращаемся опять в корень и запускаем phpdoc.bat. После этого в исходящей директории вы увидите несколько вариантов документаций. Выбираем ту которая больше Вам по душе, и указываем только её в параметре output нашей конфигурации.

Оформить шаблон вы можете в папке phpDocumentor/Converters/Формат/Тип/templates/class.tpl, путь не точный, и зависит от выбранного формата и типа.
Если вы собираетесь использовать русский язык — читаем фикс

Спасибо за внимание:)
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.