Введение: Почему документация — это не роскошь, а необходимость
Каждый PHP-разработчик сталкивался с ситуацией, когда чужой (или даже свой собственный) код через месяц превращается в "тёмный лес". Отсутствие документации — одна из главных причин, почему проекты тормозятся, а баги множатся. Документирование кода — это не просто вежливость по отношению к коллегам, это инвестиция в будущее проекта. В этой статье мы разберём, как правильно писать документацию для PHP-проекта, используя стандарт PHPDoc, инструменты автоматизации и лучшие практики.
1. Основы PHPDoc: Структура и синтаксис
PHPDoc (или phpDocBlock) — это стандарт комментирования кода в PHP, который позволяет не только описать назначение функции или класса, но и автоматически генерировать документацию. Каждый блок документации начинается с символов /** и заканчивается */.
Базовая структура DocBlock
Рассмотрим минимальный блок для функции:
<?php
/**
* Вычисляет сумму двух чисел
*
* @param int $a Первое слагаемое
* @param int $b Второе слагаемое
* @return int Сумма чисел
*/
function sum(int $a, int $b): int {
return $a + $b;
}
Ключевые элементы:
- Краткое описание — первая строка после открывающего комментария. Должно быть ёмким и понятным.
- Развернутое описание (опционально) — может следовать после пустой строки. Позволяет объяснить сложные алгоритмы.
- Теги — начинаются с символа
@. Основные:@param,@return,@throws.
Документирование классов и свойств
Для классов и свойств используются аналогичные блоки:
<?php
/**
* Класс для работы с пользователями
*
* Предоставляет методы для создания, обновления и удаления пользователей.
* Все операции проходят валидацию и логирование.
*/
class UserManager {
/**
* @var PDO|null Объект соединения с базой данных
*/
private $db;
/**
* @var LoggerInterface Инстанс логгера
*/
private $logger;
/**
* Конструктор класса
*
* @param PDO $db Объект PDO для работы с БД
* @param LoggerInterface $logger Объект логгера
*/
public function __construct(PDO $db, LoggerInterface $logger) {
$this->db = $db;
$this->logger = $logger;
}
}
2. Основные теги PHPDoc: Полный справочник
Для создания полноценной документации необходимо знать ключевые теги. Вот список самых важных из них:
Теги для описания типов и параметров
@param— описывает параметры метода/функции. Формат:@param тип $имя Описание.@return— описывает возвращаемое значение. Формат:@return тип Описание.@var— описывает тип свойства класса.@throws— указывает, какие исключения может выбрасывать метод.
Теги для описания структуры и метаданных
@see— ссылка на другой элемент документации (класс, метод).@link— внешняя ссылка (URL).@deprecated— отмечает устаревший элемент.@since— указывает версию, с которой элемент доступен.@author— автор кода.
Пример сложного DocBlock
<?php
/**
* Получает список заказов пользователя с пагинацией
*
* Метод выполняет запрос к БД с использованием подготовленных выражений.
* Возвращает массив объектов Order.
*
* @param int $userId ID пользователя
* @param int $page Номер страницы (начиная с 1)
* @param int $limit Количество записей на странице (макс. 100)
* @return array Массив объектов Order
* @throws InvalidArgumentException Если userId меньше 1
* @throws DatabaseException Если произошла ошибка БД
* @see Order::getById()
* @since 2.0.0
* @author Ivan Ivanov
*/
public function getUserOrders(int $userId, int $page = 1, int $limit = 20): array {
if ($userId < 1) {
throw new InvalidArgumentException('ID пользователя должен быть положительным');
}
// ... логика запроса
return [];
}
3. Инструменты для генерации документации
Ручное написание всех блоков — это только половина дела. Чтобы получить красивую HTML-документацию, используйте специализированные инструменты.
phpDocumentor (PHPDoc)
Самый популярный генератор документации для PHP. Установка через Composer:
composer require --dev phpdocumentor/phpdocumentor
Запуск генерации:
vendor/bin/phpdoc -d ./src -t ./docs
Где -d — директория с исходным кодом, -t — директория для вывода документации.
Doxygen
Универсальный инструмент, поддерживающий множество языков, включая PHP. Настраивается через конфигурационный файл Doxyfile.
IDE-инструменты
Современные IDE (PhpStorm, VS Code) автоматически подсказывают DocBlock при вводе /**. В PhpStorm можно сгенерировать блок документации для функции или класса одной командой (Alt+Enter → Generate PHPDoc).
4. Лучшие практики документирования PHP-кода
Чтобы документация была полезной, а не формальной, следуйте этим рекомендациям:
Пишите понятные описания
Избегайте очевидных комментариев. Вместо /** Устанавливает имя */ напишите /** Устанавливает имя пользователя с валидацией на длину */.
Документируйте все публичные методы
Публичные методы — это API вашего класса. Они должны быть документированы всегда. Приватные методы можно документировать выборочно, если их логика сложна.