PHPStan - ваш личный корректор кода, который никогда не спит
Знакомая ситуация? Вы написали код, протестировали вручную, тесты тоже зелёные. Выкатываете на продакшен, и тут... TypeError: Argument 1 passed to... must be of the type string, null given. Классика. Ошибка, которую можно было отловить на самом раннем этапе, но она просочилась. В моей практике такое случалось, и это всегда неприятно. А что, если я скажу, что есть инструмент, который работает как компилятор для PHP, проверяя ваш код ещё до того, как вы его запустите?
Сегодня мы поговорим о PHPStan — статическом анализаторе, который стал для многих PHP-разработчиков таким же незаменимым инструментом, как composer или git.
Что такое статический анализ и зачем он нужен?
Давайте начистоту: PHP — язык с динамической типизацией. Это даёт гибкость, но и создаёт простор для ошибок, которые "всплывают" только во время выполнения кода. Статический анализ — это процесс проверки кода без его реального запуска. Анализатор "читает" ваш код и пытается найти потенциальные проблемы: несоответствие типов, вызов несуществующих методов, передачу неправильного числа аргументов и многое другое.
PHPStan делает именно это. Он как придирчивый, но очень умный коллега, который заглядывает вам через плечо и говорит: "Постой, вот здесь ты пытаешься вызвать метод у объекта, который может быть null". По сути, он приближает PHP к строго типизированным, компилируемым языкам, где большинство подобных ошибок отлавливается ещё на этапе компиляции.
Ключевые возможности: что умеет PHPStan?
Вместо тысячи слов — конкретные примеры того, как PHPStan может спасти ваш день (и нервы).
1. Охота на ошибки до первого запуска
Это главная и самая важная функция. PHPStan находит целые классы багов, которые вы могли бы пропустить.
Представьте такой код:
/**
* @param int[] $numbers
*/
function sum(array $numbers): int
{
$total = 0;
foreach ($numbers as $number) {
// Ой, а что если в массиве окажется не число?
$total += $number;
}
return $total;
}
// PHP спокойно "съест" это, но в рантайме будет ошибка
sum([1, 2, 'oops']);
PHP заметит проблему только когда попытается сложить int и string. А PHPStan предупредит вас сразу после анализа, не запуская ни строчки: Parameter #1 $number of function sum expects array<int>, array<int, int|string> given.
2. Понимание PHPDoc на новом уровне
Современный PHP обзавёлся строгой типизацией, но что делать с массивами объектов или более сложными структурами? На помощь приходят PHPDoc-аннотации. PHPStan не просто их видит, он их понимает.
class User {
public function getName(): string { /* ... */ }
}
/**
* @param User|null $user
*/
function printUserName(?User $user): void
{
// Опасное место! $user может быть null
echo $user->getName();
}
PHPStan немедленно укажет на проблему: Cannot call method getName() on User|null. Это заставит вас добавить проверку if ($user !== null), что делает код намного надёжнее.
3. Гибкая настройка под любой проект
Одна из причин, почему разработчики боятся внедрять статические анализаторы в уже существующие проекты — это страх утонуть в тысячах ошибок. Создатели PHPStan это предусмотрели.
Инструмент имеет 9 "уровней" строгости. Вы можете начать с level: 0, который отлавливает только самые очевидные и критичные ошибки. Исправили их? Переходите на level: 1 и так далее. Это позволяет внедрять статический анализ постепенно, не останавливая разработку.
4. Огромная экосистема и расширения
PHPStan не живёт в вакууме. Существует целая библиотека расширений для популярных фреймворков и библиотек:
- Symfony: Понимает магию контейнера зависимостей.
- Laravel: Разбирается в фасадах и Eloquent.
- Doctrine: Знает всё о ваших репозиториях и типах полей.
- PHPUnit: Добавляет проверки, специфичные для тестов.
Это значит, что анализ будет гораздо точнее, ведь PHPStan будет знать о "магии", которую использует ваш фреймворк.
Как начать использовать?
Всё до смешного просто. PHPStan устанавливается через Composer как зависимость для разработки:
composer require --dev phpstan/phpstan
Далее, создайте в корне проекта конфигурационный файл phpstan.neon:
parameters:
level: 5 # Начните с 0 или 1 для старого проекта
paths:
- src
- tests
И запустите анализ:
vendor/bin/phpstan analyse
Готово! PHPStan просканирует указанные директории и покажет все найденные проблемы. Интересно, что вы найдёте в своём проекте?
Для тех, кто хочет сначала "поиграться", есть отличная онлайн-песочница, где можно проверить любой фрагмент кода.
PHPStan Pro: когда хочется большего
У проекта есть и платная версия — PHPStan Pro. Она предлагает удобный веб-интерфейс для просмотра ошибок, где можно кликнуть на проблему и сразу перейти на нужную строку в вашей IDE. Также есть "watch mode", который в реальном времени анализирует изменённые файлы. Это не обязательное дополнение, но оно показывает, насколько серьёзно развивается проект.
Выводы: кому и зачем?
PHPStan — это маст-хэв инструмент для любого современного PHP-разработчика.
- Для соло-разработчиков и небольших команд — это второй пилот, который страхует от глупых ошибок и опечаток.
- Для больших команд и legacy-проектов — это способ постепенно повышать качество кода и проводить безопасный рефакторинг.
Начать использовать его на удивление легко. Просто добавьте его в свой проект, начните с нулевого уровня и посмотрите, что он найдёт. Гарантирую, вы будете удивлены. Это один из тех инструментов, попробовав который, вы уже не сможете представить разработку без него.
Проект поддерживается сообществом и спонсорами:
Хотите, чтобы ваш логотип был здесь? Узнайте больше »























