Какие линтеры и статические анализаторы ты использовал в PHP-проектах?

«Какие линтеры и статические анализаторы ты использовал в PHP-проектах?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В PHP-проектах я настраиваю и использую комплекс инструментов для статического анализа, чтобы поддерживать высокое качество кода на ранних этапах.

Основной стек:

  1. PHP_CodeSniffer (PHPCS) + PHP-CS-Fixer. Первый — для проверки, второй — для автоматического исправления стиля кода. Использую стандарт PSR-12 и кастомные правила проекта. Конфигурация в phpcs.xml.dist:

    <?xml version="1.0"?>
    <ruleset name="MyProject">
        <rule ref="PSR12"/>
        <rule ref="SlevomatCodingStandard.TypeHints.PropertyTypeHint"/>
        <file>src</file>
        <file>tests</file>
        <exclude-pattern>*/vendor/*</exclude-pattern>
    </ruleset>
  2. PHPStan. Запускаю на максимальном уровне (level: 9) для строгого контроля типов и поиска скрытых ошибок. Интегрирую его в CI/CD пайплайн, чтобы проверка была обязательным этапом.

    # phpstan.neon
    parameters:
        level: max
        paths:
            - src
        checkMissingIterableValueType: false
  3. Psalm. Использую в дополнение к PHPStan в некоторых проектах, так как он предлагает уникальные проверки, особенно для аннотаций типов в PHPDoc и поиска возможных SQL-инъекций.

Интеграция в процесс: Я настраиваю скрипты в composer.json, чтобы команды были стандартизированы для всех разработчиков:

{
    "scripts": {
        "cs-check": "phpcs",
        "cs-fix": "phpcbf",
        "stan": "phpstan analyse",
        "analyse": ["@cs-check", "@stan"]
    }
}

Запуск composer analyse выполняет всю цепочку проверок. Это позволяет отлавливать проблемы до коммита и код-ревью, значительно экономя время команды.