Статический анализ кода — это процесс автоматизированной проверки исходного кода без его выполнения, направленный на выявление ошибок, потенциальных уязвимостей и отклонений от best practices. В PHP для этого используются инструменты вроде PHPStan и Psalm.
Как это работает
Анализаторы:
- Сканируют код как абстрактное синтаксическое дерево (AST)
- Проверяют типы, сигнатуры методов, DocBlock-аннотации
- Анализируют поток данных и возможные состояния программы
- Сравнивают код с заданными правилами (rule sets)
Пример кода с проблемой, которую выявит статический анализ:
function calculate(int $a, int $b): int {
return $a + $b;
}
calculate("5", "10"); // Psalm/PHPStan обнаружат несоответствие типов
Ключевые возможности PHPStan/Psalm
- Вывод типов: Автоматическое определение типов там, где они не указаны
- Проверка аннотаций: Сравнение PHPDoc с фактическим использованием
- Обнаружение мертвого кода: Неиспользуемые классы, методы, свойства
- Поиск SQL-инъекций: Анализ строковых параметров запросов
- Проверка исключений: Контроль неперехваченных исключений
Уровни строгости
PHPStan использует уровни (0-9), где:
- Уровень 0: Базовые проверки (синтаксис, существование классов)
- Уровень 9: Полный анализ с strict rules (например, точная проверка array shapes)
Интеграция в workflow
// phpstan.neon
parameters:
level: 8
paths:
- src
excludePaths:
- tests/*
Отличия Psalm от PHPStan
- Psalm изначально заточен под type checking
- Имеет встроенную поддержку шаблонов (templates)
- Может автоматически исправлять некоторые ошибки
- Лучше работает с массивоподобными структурами
Практическая польза
- На 30-50% сокращает время code review
- Позволяет обнаружить ошибки до попадания в production
- Форсирует единый стиль кода в команде
- Служит документацией ожидаемого поведения (через аннотации)
Резюмируем:
статический анализ — это "линтинг на стероидах", который превращает PHP в более строго типизированный язык, существенно повышая надежность кодовой базы. Инструменты вроде PHPStan/Psalm стали must-have для профессиональных PHP-проектов.