Если вы когда-нибудь пытались прочитать код, написанный кем-то, кроме вас, вы знаете, что это может быть сложной задачей. Беспорядочный "код спагетти", смешанный с множеством странно названных переменных, заставляет вашу голову кружиться. Эта функция ожидает строку или массив? Эта переменная хранит целое число или объект? После бесчисленных часов следования за нитями кода и попытки понять, что делает каждый бит, нередко отказаться и просто переписать все с нуля - задача, которая тратит слишком много вашего драгоценного времени.
PHPDoc, сокращение от PHPDocumentor, является мощным инструментом, который позволяет легко документировать ваш код с помощью специально отформатированных комментариев. Документация будет доступна не только в исходном коде, но и в профессиональной документации, извлеченной с использованием веб-интерфейса или интерфейса командной строки. Результат может быть в различных форматах, таких как HTML, PDF и CHM. Кроме того, многие IDE, которые обеспечивают завершение кода, могут анализировать комментарии PHPDoc и предоставлять полезные функции, такие как подсказки типов. Используя PHPDoc, вы можете позволить другим (и вам самим) легко понять ваш код - через недели, месяцы и даже годы после его написания.
DocBlocks
DocBlock - это многострочный комментарий в стиле C, используемый для документирования блока кода. Он начинается с /** и имеет звездочку в начале каждой строки.
/** * <...> */
Пример Doc-блока:
/**
* Этот класс является примером использования doc-блоков phpDoc
*/
class SomeClass
{
/** @type string|null Текст приветствия */
protected $weclome = null;
/**
* Этот метод задает текст приветствия.
* @param string $text текст приветствия, максимум 255 символов.
* @return void
*/
public function setWeclomeText($text)
{
$this->weclome = $text;
}
}
DocBlocks состоит из трех разделов: краткое описание, длинное описание и теги. Все три раздела являются необязательными.
Краткое описание - это краткое описание, оканчивающееся либо новой строкой, либо точкой. Процедуры синтаксического анализа PHPDoc'а умны; короткое описание заканчивается только в том случае, если точка находится в конце предложения.
Длинное описание - это то, куда уходит основная часть документации; это может быть многострочно и сколько угодно времени.
Как длинные, так и короткие описания могут содержать определенные элементы HTML для форматирования. HTML-теги, которые не поддерживаются, будут отображаться в виде простого текста. Однако PHPDoc может генерировать документацию в нескольких форматах, поэтому теги HTML не обязательно отображаются так же, как в файле HTML; фактическое форматирование зависит от сгенерированного формата файла.
Раздел тегов DocBlock содержит любое количество специальных тегов, обозначаемых символом @. Теги используются для указания дополнительной информации, такой как ожидаемые параметры и их тип. Большинство тегов должны быть в отдельной строке, за исключением определенных тегов, которые могут быть встроенными. Встроенные теги окружены фигурными скобками и могут быть как в длинном, так и в коротком описании.
Не все элементы кода могут быть документированы с помощью DocBlocks. Вот список элементов кода, которые могут быть документированы:
Справочник phpDoc
@api - помечает структурный элемент, используемый сторонними программами, и являющийся частью API.
/**
* Этот метод показывает версию релиза
* @api
* @return void
*/
function showVersion() {}
@author - задает имя автора.
/** * @author My Name * @author My Name <my.name@example.com> */
@copyright - копирайтинг.
/** * @copyright 2020-2021 The alishoff.com */
@deprecated - тег для пометки элементов на удаление в будущих версиях.
/** * @deprecated * @deprecated 1.0.0 * @deprecated Больше не используется внутри кода, и не рекомендуется. */
@filesource - сообщает в phpDocumentor, что нужно включить исходный код в текущий файл для разбора.
/** * @filesource */
@ignore - сообщает в phpDocumentor, что следующий структурный элемент обрабатывать не надо.
if ($ostest) {
/**
* Константа определяет версию операционной системы
*/
define("OS","Unix");
} else {
/**
* @ignore
*/
define("OS","Windows");
}
@internal - говорит, что элемент является внутренним элементом этого приложения или библиотеки.
/**
* @internal
* @return Возвращает целочисленное значение - количество чего либо.
*/
function count() {}
@license - описывает соответствие лицензии.
/** * @license GPL * @license http://opensource.org/licenses/gpl-license.php GNU Public License */
@link - связывает структурный элемент с сайтом, откуда он взят.
/**
* @link http://example.com Документация к функции.
* @return Возвращает целочисленное значение - количество чего либо.
*/
function count() {}
@method - указывает какие магические (не явные) методы класса можно вызвать.
class Parent
{
public function __call() {}
}
/**
* @method string getString()
* @method void setInteger(integer $integer)
* @method setString(integer $integer)
*/
class Child extends Parent {}
@param - описывает тип и имя параметра передаваемого в функцию.
/**
* Counts the number of items in the provided array.
* @param mixed[] $array Array массив значений.
* @param int|string $value некоторое значение.
* @return int возвращает номер элемента.
*/
function count(array $items, $value) {}
@property - аналогичен тегу @method. Позволяет классу знать какие можно использовать магические свойства.
class Parent
{
public function __get() {}
}
/**
* @property string $myProperty
*/
class Child extends Parent {}
@property-read - указывает какие можно использовать магические свойства, только для чтения.
class Parent
{
public function __get() {}
}
/**
* @property-read string $myProperty
*/
class Child extends Parent {}
@property-write - указывает какие можно использовать магические свойства, только для записи.
class Parent
{
public function __set() {}
}
/**
* @property-write string $myProperty
*/
class Child extends Parent {}
@return - описывает возвращаемое значение функцией или методом.
/**
* @return string|null Метка для текста.
*/
function getLabel() {}
@see - задает ссылку из структурного элемента, на веб-сайт или другой элемент.
/**
* @see http://example.com Документация функции.
* @see MyClass::$items свойства элементов.
* @see MyClass::setItems() установка элементов коллекции.
* @return integer Показывает количество элементов в коллекции.
*/
function count() {}
@since - говорит о том, что структурный элемент стал доступен с заданной версии пакета.
/**
* Файл проекта
* @package test
* @version 1.5.2
*/
/**
* функция dataFunction
* @since Version 1.1.2
*/
function dataFunction() {}
@var - указывает описание для свойств класса.
class User
{
/**
* пример документирования переменной
* @var string
*/
var $variable;
/**
* пример документирования переменной с описанием
* @var string содержит информацию о User
*/
var $variable_with_desc;
}
@version - версия документа.
/**
* Пример использования тега @version
* @version v 1.2
*/
function dataFunction() {}
@example - пример использования метода или класса.
@global - описывает глобальные переменные.
@package - классификация структурных элементов в логических подразделениях.
@subpackage - описывает под-пакет основного пакета, используется вместе с тегом @package.
@todo - документирует задачи, которые необходимо выполнить в ближайшем будущем.
@uses - показывает ссылку на документацию по этому элементу, и создает обратную ссылку в других документациях элементов на него.