Введение
Документация — это не просто приятное дополнение к проекту, а критически важный элемент профессиональной разработки на PHP. Хорошо написанная документация ускоряет онбординг новых разработчиков, снижает количество ошибок и делает код поддерживаемым даже спустя годы. В этой статье мы пройдем путь от основ написания комментариев до создания полноценной технической документации для вашего PHP проекта.
Мы разберем стандарты PHPDoc, лучшие практики форматирования, инструменты автоматической генерации и ответим на вопрос: как сделать документацию полезной, а не формальной.
Основы PHPDoc: как правильно комментировать PHP код
Стандарт PHPDoc (или DocBlock) — это общепринятый способ документирования PHP кода. Он основан на специальных комментариях, которые начинаются с /** и заканчиваются */. Каждый такой блок описывает элемент кода: класс, метод, свойство или функцию.
Базовая структура DocBlock
Минимальный блок документации включает описание и набор тегов (аннотаций). Рассмотрим пример для простого метода:
<?php
/**
* Вычисляет сумму двух чисел.
*
* @param int $a Первое слагаемое.
* @param int $b Второе слагаемое.
* @return int Сумма чисел.
*/
function sum(int $a, int $b): int {
return $a + $b;
}
?>
Основные теги PHPDoc
@param— описывает параметр метода или функции. Формат:@param тип $название Описание.@return— указывает возвращаемый тип и его описание.@var— используется для свойств класса, чтобы указать их тип.@throws— документирует исключения, которые может выбрасывать метод.@see— ссылка на другой элемент документации или внешний ресурс.@deprecated— помечает элемент как устаревший, с указанием альтернативы.
Пример для класса с несколькими тегами:
<?php
/**
* Класс для работы с базой данных.
*
* @package App\Database
* @author Иван Иванов
* @version 1.0.0
*/
class Database {
/**
* @var PDO Подключение к БД.
*/
private PDO $connection;
/**
* Устанавливает соединение с базой данных.
*
* @param string $dsn Строка подключения DSN.
* @param string $user Имя пользователя.
* @param string $pass Пароль.
*
* @throws PDOException Если не удалось подключиться.
*/
public function connect(string $dsn, string $user, string $pass): void {
$this->connection = new PDO($dsn, $user, $pass);
}
}
?>
Инструменты для генерации документации PHP
Вручную поддерживать документацию в HTML формате неэффективно. На помощь приходят автоматические генераторы. Самый популярный — phpDocumentor (phpdoc).
Установка и базовое использование phpDocumentor
Установить phpDocumentor можно через Composer:
composer require --dev phpdocumentor/phpdocumentor
После установки запустите генерацию документации из корня проекта:
vendor/bin/phpdoc -d src -t docs
Где -d src — папка с исходным кодом, а -t docs — папка, куда будет сохранена сгенерированная HTML документация.
Другие полезные инструменты
- Doxygen — поддерживает не только PHP, но и C++, Python, Java. Подходит для проектов на смешанных языках.
- Sami — современный генератор документации, который умеет создавать несколько версий документации для разных веток кода.
- ApiGen — легковесный генератор, ориентированный на простоту использования.
Лучшие практики написания документации для PHP
Качественная документация — это не просто набор тегов. Она должна быть полезной, точной и актуальной. Вот несколько правил, которые помогут вам её создать.
Пишите для людей, а не для машин
Описание должно отвечать на вопрос «зачем?», а не «что?». Вместо «Метод сохраняет данные» напишите «Сохраняет данные пользователя в базу данных после валидации». Избегайте очевидных комментариев, которые дублируют код.
Документируйте неочевидные моменты
Если метод содержит сложную логику, работу с API или специфические алгоритмы — добавьте пояснение. Пример:
<?php
/**
* Форматирует номер телефона в международный формат.
*
* Алгоритм сначала удаляет все нецифровые символы, затем
* добавляет код страны +7 для российских номеров, если он отсутствует.
*
* @param string $phone Исходный номер телефона.
* @return string Отформатированный номер.
*/
function formatPhone(string $phone): string {
// ... реализация
}
?>
Поддерживайте документацию в актуальном состоянии
Устаревшая документация хуже, чем её отсутствие. Введите правило: при каждом изменении кода обновляйте соответствующий DocBlock. Используйте CI/CD пайплайны, чтобы проверять, что документация не расходится с кодом (например, с помощью линтера phpstan или psalm с поддержкой PHPDoc).
Используйте примеры кода
Для публичных API и сложных методов добавляйте блок @example или просто пишите пример использования в описании. Это значительно ускоряет понимание.
<?php
/**
* Отправляет email уведомление пользователю.
*
* Пример использования:
* <code>
* $mailer = new Mailer();
* $mailer->send('user@example.com', 'Тема письма', 'Текст письма');
* </code>
*
* @param string $to Адрес получателя.
* @param string $subject Тема письма.
* @param string $body Тело письма.
* @return bool true в случае успеха, false в случае ошибки.
*/
public function send(string $to, string $subject, string $body): bool {
// ...
}
?>
Заключение
Написание документации для PHP проекта — это инвестиция в будущее вашего кода. Следуя стандартам PHPDoc, используя автоматические генераторы и придерживаясь лучших практик,