Praktický návod

Jak zavést PHPStan do existujícího projektu

Zastav přibývání nových typových chyb hned a existující dluh zmenšuj měřitelně po částech.

25 minut · Statická analýza

Nejdřív stručně

První cíl není nula chyb za jeden den

PHPStan může analyzovat starý projekt postupně. Nejdřív oprav špatný bootstrap, neznámé symboly a chyby v dotčené oblasti, potom případný zbytek uzamkni baseline souborem.

Baseline není odpadkový koš. Umožní CI blokovat nové problémy na přísném rule levelu, zatímco počet starých výjimek plánovaně klesá.

Připrav si

Zmapuj skutečný runtime projektu

Analýza musí znát stejné PHP, frameworkové typy a generovaný kód jako aplikace.

  • Podporovanou verzi PHP a aktuální composer.lock spustitelné v lokálním i CI prostředí.
  • Adresáře vlastního kódu a testů; vendor ani cache se přímo neanalyzují.
  • Framework extension nebo bootstrapFiles pouze tam, kde jsou symboly vytvářené dynamicky.
  • Člověka zodpovědného za revizi ignore pravidel, baseline a pravidelné zvýšení přísnosti.

Kroky 1 až 3

Zapoj analýzu bez velkého třesku

Nejdřív stabilizuj konfiguraci a signál, potom teprve řeš objem nálezů.

1. Nainstaluj a nakonfiguruj jednu cestu

  1. Nainstaluj nástroj do dev dependencies a commitni jeho verzi přes composer.lock.
  2. V phpstan.neon.dist nastav paths na vlastní src a případně tests, PHP version a konkrétní rule level.
  3. Spouštěj PHPStan ve stejném kontejneru nebo image jako aplikaci. Nejprve oprav class-not-found, bootstrap a chybné extension konfigurace.
  4. Přidej Composer script, aby vývojář i CI používali stejný příkaz bez skrytých lokálních argumentů.
composer require --dev phpstan/phpstan
Oficiální PHPStan Getting Started

2. Oprav typy podle hodnoty

  1. Začni chybami, které mohou změnit runtime: špatné argumenty, nullable hodnoty, neexistující metody, unreachable větve a neúplné match.
  2. Přidej nativní typy na vstupy, návraty a properties. PHPDoc používej pro generika, array shapes a typy, které PHP neumí vyjádřit.
  3. Dynamická data z requestu, JSONu nebo databáze validuj na hranici a převáděj na DTO či value object.
  4. Neumlčuj problém širokým mixed nebo blanket ignore. Extension, stub nebo úzký ignore s identifikátorem použij jen pro prokazatelně bezpečnou dynamiku.
vendor/bin/phpstan analyse --memory-limit=1G
Oficiální PHPStan dokumentace k rule levelům

3. Uzamkni starý dluh baseline

  1. Zvol co nejvyšší praktický level. Pokud zbývají desítky až stovky starých nálezů, vygeneruj jednorázový baseline a ručně ho zkontroluj.
  2. Baseline commitni, zahrň v konfiguraci a v CI zakaž nové chyby. Při běžné změně ho celý neregeneruj.
  3. Každý opravený soubor odstraní odpovídající výjimku. Sleduj počet baseline položek jako klesající metriku.
  4. Přísnost zvyšuj po modulech nebo úrovních; nový kód drž na aktuálním standardu bez přidávání historického dluhu.
vendor/bin/phpstan analyse --level=7 --generate-baseline
Oficiální PHPStan dokumentace k baseline

Krok 4

Dokaž, že nové chyby neprojdou

Stejný příkaz musí být reprodukovatelný lokálně i na čistém CI runneru.

  1. Spusť analýzu dvakrát

    Oba běhy skončí se stejným výsledkem a konfigurace nezávisí na lokálně generovaném souboru.

    composer phpstan
  2. Vlož úmyslnou typovou chybu

    CI ji odmítne, i když je ve stejném souboru jako baselinované staré nálezy. Potom změnu vrať.

  3. Oprav jednu baseline položku

    PHPStan oznámí nepoužitý ignore nebo baseline upravíš cíleně; celkový počet výjimek klesne.

Když to zlobí

Nejčastější chyby

První běh hlásí tisíce neznámých tříd

Nejdřív oprav autoload, framework extension, generated stubs a paths. Baseline z chybné konfigurace negeneruj.

composer dump-autoload
Baseline při každém PR roste

Generování není běžný CI krok. Commitni pevný baseline a každou novou výjimku vyžaduj samostatně zdůvodnit.

Vývojář má jiný výsledek než CI

Sjednoť PHP image, extensions, composer.lock, config cestu a pracovní adresář. Cache nesmí měnit obsah výsledku.

Paměť analýzy rychle roste

Neanalyzuj vendor a cache, aktualizuj extensions a prozkoumej problematické soubory; vyšší limit je až poslední krok.

Hotovo

Statická analýza brání novému dluhu.

Konfigurace je reprodukovatelná, CI zachytí nové typové chyby a kontrolovaný baseline umožňuje staré nálezy postupně odstranit.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.