ITKUP
Личный блог на тему разработки, IT. Учусь, записываю, анализирую.

PHP: PHPDoc

PHPDoc - это стандарт документирования PHP кода; специальные многострочные комментарии DOC-блоки (от англ. "DocBlock").

! ЗАПОМИНАЕМ !

Doc-блок (от англ. DocBlock comments) — это многострочные комментарии (в стиле языка C), которые располагаются перед документируемым элементом.

Плюсы при использовании:

  1. Автоматическое дополнение от IDE (в случае, если IDE поддерживает работу с PHPDoc);
  2. Документация "на месте";
  3. Предотвращение ошибок (IDE подсветит, если, например,  передать не тот тип);
  4. Автоматическая генерация документации (средствами инструмента типа phpDocumentor создается HTML-документация).

Инструменты, которые используют PHPDoc:
  • PhpStorm;
  • Visual Studio Code;
  • Eclipse PDT;
  • Komodo IDE;
  • и другие.

Существует специальный инструмент, позволяющий на основе PHPDoc вести документацию: phpDocumentor.

phpDocumentor - это система документирования исходных текстов на PHP, имеющая встроенную поддержку генерации документации в форматах HTML, LaTeX, man, RTF и XML. Она может использоваться как из командной строки, так и с помощью Web-интерфейса. Понимает синтаксис 4-й и 5-й версий языка PHP. Система парсит логическую структуры PHP кода (классы, функции, переменные, константы) и привязки к ней комментариев, написанных по стандартам PHPDoc.

Основные правила:

  • DocBlock должен начинаться с последовательности символов /**, за которой следует пробел;
  • заканчиваться DocBlock должен на */ (между "началом" и "концом" может иметь ноль или более строк между ними);
  • если запись занимает несколько строк, то каждая строка должна начинаться со звездочки (*), которая ДОЛЖНА быть выровнена с первой звездочкой открывающего предложения.


// Пример одной строки:
/** <...> */

// Многострочный пример:
/**
* <...>
*/


Формат записи следующий:

  • Резюме
  • Описание
  • Теги


/**
* Это резюме.
*
* Это Описание. Оно может занимать несколько строк или
* содержать примеры «кода» с использованием языка разметки _Markdown_.
*
* @see Markdown
*
* @param int $parameter1 Описание параметра.
* @param \Exception $e Описание другого параметра.
*
* @\Doctrine\Orm\Mapper\Entity()
*
* @return string
*/
function test($parameter1, $e) {
    ...
}


Описание можно упускать.

Резюме:

  • должно содержать краткое описание «Структурного элемента», определяющего цель (не более 1-2 строки);
  • должно заканчиваться двумя последовательными разрывами строк (если только оно не является единственным содержимым в PHPDoc);
  • если написано описание, то перед ним обязательно должно быть резюме.
Описание:
  • не является обязательным (можно упускать);
  • рекомендуется Markdown.

Теги:

  • каждый тег начинается с новой строки, за ним следует знак @ и имя тега, за которым следует пробел и метаданные (включая описание);
  • если метаданные указаны, то они могут занимать несколько строк.

Пример записи тега:


@param string $argument1 Это параметр.


Тег выше состоит из:

  • имя («param»);
  • метаданные («строка $argument1. Это параметр».; где метаданные разделены на тип "string", имя переменной "$argument" и описание "Это параметр").

Имена тегов указывают на тип информации представляемый тегом.

Пример с функцией:


/**
* Отправляет персональное системное уведомление пользователю через модуль IM Битрикс
*
* Функция выполняет проверку корректности входных параметров, экранирует текст и отправляет системное
* уведомление через CIMMessenger::Add(). В случае успеха возвращает true.
*
* @param int|string $ToUser ID пользователя-получателя (будет преобразован в int)
* @param int|string $FromUser ID пользователя-отправителя (будет преобразован в int)
* @param string $msgTxt Текст уведомления (не должен быть пустым)
*
* @return bool Возвращает true при успешной отправке уведомления, false в случае:
* - невозможности подключить модуль 'im'
* - если ID получателя или отправителя <= 0
* - если текст сообщения пуст
* - если метод CIMMessenger::Add() вернул false
*/
function SendPersNotif_CIMMessenger($ToUser, $FromUser, $msgTxt) {
    if (!CModule::IncludeModule('im')) return false;

    // Проверка входящих параметров
    $ToUser = intval($ToUser);
    if ($ToUser <= 0) return false;

    $FromUser = intval($FromUser);
    if ($FromUser <= 0) return false;

    if (empty($msgTxt)) return false;

    $safeMsgTxt = htmlspecialcharsbx($msgTxt);    // Экранируем текст (на всякий случай)
    $messenger = new \CIMMessenger();
    $fields = [
        "TO_USER_ID"=> $ToUser, // Получатель
        "FROM_USER_ID"=> $FromUser, // Отправитель
        "MESSAGE_TYPE"=> IM_MESSAGE_SYSTEM, // Тип сообщения
        "NOTIFY_MESSAGE"=> $safeMsgTxt, // Текст сообщения
        "NOTIFY_MODULE" => "fusion.sigma", // ID модуля
    ];

    // Возвращаем результат отправки
    $result = $messenger->Add($fields);
    return ($result !== false);
}

Cookie-файлы
Настройка cookie-файлов
Детальная информация о целях обработки данных и поставщиках, которые мы используем на наших сайтах
Аналитические Cookie-файлы Отключить все
Технические Cookie-файлы
Другие Cookie-файлы
Мы используем файлы Cookie для улучшения работы, персонализации и повышения удобства пользования нашим сайтом. Продолжая посещать сайт, вы соглашаетесь на использование нами файлов Cookie. Подробнее о нашей политике в отношении Cookie.
Понятно Подробнее
Cookies