PHPStan - ваш личный корректор кода, который никогда не спит

09 Jun, 2026

Знакомая ситуация? Вы написали код, протестировали вручную, тесты тоже зелёные. Выкатываете на продакшен, и тут... TypeError: Argument 1 passed to... must be of the type string, null given. Классика. Ошибка, которую можно было отловить на самом раннем этапе, но она просочилась. В моей практике такое случалось, и это всегда неприятно. А что, если я скажу, что есть инструмент, который работает как компилятор для PHP, проверяя ваш код ещё до того, как вы его запустите?

Сегодня мы поговорим о PHPStan — статическом анализаторе, который стал для многих PHP-разработчиков таким же незаменимым инструментом, как composer или git.

PHPStan

Что такое статический анализ и зачем он нужен?

Давайте начистоту: 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-проектов — это способ постепенно повышать качество кода и проводить безопасный рефакторинг.

Начать использовать его на удивление легко. Просто добавьте его в свой проект, начните с нулевого уровня и посмотрите, что он найдёт. Гарантирую, вы будете удивлены. Это один из тех инструментов, попробовав который, вы уже не сможете представить разработку без него.


Проект поддерживается сообществом и спонсорами:

Хотите, чтобы ваш логотип был здесь? Узнайте больше »

Gold Sponsors

Matt Mullenweg     Mojam
CHECK24



Silver Sponsors

ShipMonk Shopware



Bronze Sponsors

TheCodingMachine     Private Packagist
CDN77     Blackfire.io
iO     Fame Helsinki
Belsimpel     Togetter
RightCapital     Shoptet
ZOL     EdgeNext
Route4Me: Route Optimizer and Route Planner Software     Craft CMS
TicketSwap     campoint AG
Crisp.nl     Inviqa