Hur man statistiskt analyserar PHP -projekt med PHPStan

0
132

PHPStan är ett statiskt analyssystem för PHP -projekt. Den hittar fel i din kodbas genom att inspektera källfilerna. Du behöver inte köra din kod eller skriva tester manuellt för att upptäcka problem!

Termen “ statisk analys ” definieras som felsökningskod utan att den faktiskt körs. Det används oftast med tolkade språk, till exempel PHP, eftersom frågorna som det hittar tenderar att dyka upp vid sammanställningsstadiet på sammanställda språk.

Statisk analys tenderar att ge de bästa resultaten när de körs inom en välstrukturerad, starkt maskinskriven kodbas. PHPStans dokumentation ger råd om att “ modern objektorienterad kod ” kommer att gynnas mest, eftersom dessa projekt ger PHPStan mer information att arbeta med.

Lägga till PHPStan i ditt projekt

För att köra PHPStan måste du ha PHP 7.1 eller senare. Detta krav gäller endast den version av PHP som används för att köra PHPStan själv. Verktyget kan analysera källfiler som är inriktade på äldre versioner av PHP.

Det rekommenderas att du använder Composer för att lägga till PHPStan som ett beroende:

composer require –dev phpstan/phpstan Advertisement

PHPStan -binären läggs till i ditt projekt på vendor/bin/phpstan. Du kan nu använda den för att analysera din kodbas för första gången:

vendor/bin/phpstan analysera src

Kommandot som visas ovan kör PHPStans tester mot alla källfiler i din src -katalog. Beroende på storleken på din kodbas kan det ta några minuter att slutföra.

< /p>

Du kommer att se en grön “ [OK] Inga fel ” meddelande om alla test klarar. Annars visas listan över fel. Följ anvisningarna som visas för att lösa varje fel innan du kör PHPStan igen.

Feltyper och nivåer

PHPStan innehåller en mängd kontroller som täcker en mängd olika möjliga kodbasproblem. Några av de vanligaste som du kommer att stöta på inkluderar följande:

  • Typsystemproblem – Tilldela en maskinskriven egenskap ett ogiltigt värde eller skicka felaktigt skrivna parametrar till en metod. Detta inkluderar också kontraktfrågor, till exempel en klass som felaktigt implementerar ett gränssnitt.
  • Funktionsanrop – Passerar för många, eller inte tillräckligt, parametrar när du anropar en funktion eller metod (t.ex. 3 istället för 4).
  • Okända klasser, metoder och funktioner – Försöker använda något som inte finns inom kodbasen.
  • Åtkomst till odefinierade/möjligen odefinierade variabler – Försöker använda en variabel som inte är definierad i ett givet omfång, eller som kanske inte alltid har ett värde men används i ett sammanhang där man antar det.
  • Död kodkontroll – Flaggning av värdelös kod, till exempel booleska jämförelser som alltid löser samma värde och kodgrenar som aldrig kommer att köras (t.ex. kod efter en returseddel inom funktioner).

Reglerna är sorterade i 9 olika “ nivåer &#8221 ;, märkta från 0 till 8. Specialnivån max fungerar som ett alias för högsta möjliga nivå. Med tiden kan PHPStan lägga till ytterligare numeriska nivåer, så att använda max säkerställer att du alltid får de striktaste kontrollerna.

Som standard kör PHPStan nivå 0. Detta inkluderar bara de mest grundläggande testerna. Det är en bra idé att få din kodbas att passera varje nivå individuellt innan du går vidare till nästa. Äldre projekt kommer sannolikt att stöta på en annan uppsättning problem med varje ny nivå.

Annonsering

För att ändra nivån som PHPStan använder kan du skicka parametern –level kommandorad:

vendor/bin/phpstan analysera src-nivå 8

Förutom den inbyggda kontroller, PHPStan -tillägg är tillgängliga för att lägga till ännu mer funktionalitet. Du kan också skriva dina egna regler från grunden. Detta är användbart när du avvecklar funktionalitet som utvecklare inte längre ska använda i någon ny kod. Vi kommer att ta upp anpassade regler i en framtida artikel.

Konfigurera PHPStan

Utöver det första experimentet kan det snabbt bli tröttsamt att använda PHPStans kommandoradsgränssnitt. Det är bäst att lägga till en konfigurationsfil i ditt projekt som sedan kan användas för källkontroll för alla dina utvecklare att använda.

PHPStan använder Neon -konfigurationsfilformatet, som har en syntax som liknar YAML. Skapa en phpstan.neon -fil i projektets rotkatalog. Den här filen laddas automatiskt när PHPStan startar, så du kan nu köra analyskommandot utan ytterligare argument:

vendor/bin/phpstan analys

För att åsidosätta konfigurationsfilen som används, skicka –configuration flagga :

vendor/bin/phpstan analyse –configuration /phpstan-config.neon

Du måste nu fylla i din phpstan.neon-fil med lite innehåll. En bra utgångspunkt kan se ut så här:

parametrar: nivå: 0 sökvägar: – src Annonsering

Denna grundläggande konfigurationsfil ska ge samma utmatning som kommandoradsinvokationen som visades tidigare. Du kan lägga till ytterligare kataloger för att skanna som nya rader i sökvägsavsnittet. Om du vill utesluta filer och kataloger lägger du till dem i ett excludes_analyse-blad inom samma parametrar.

Ignorering av fel

Ibland kan PHPStan uppstå ett problem som är oundviklig. Om det finns ett problem som du inte omedelbart kan åtgärda kan du uttryckligen ignorera det för att testerna ska klara.

Detta är särskilt viktigt när du vill gå upp till en annan nivå av kontroller, eller om du använder PHPStan i en CI -miljö där en misslyckad körning kommer att stoppa din byggdistribution. Trots det, ta inte lätt på den här handlingen – du bör bara välja att ignorera ett rapporterat fel om du är säker på att det är säkert att göra det.

När du väl har fattat beslutet lägger du till en ny ignoreErrors -sektion inom parametrarna i din konfigurationsfil. Du måste definiera meddelandet som ska matchas som en regex och sökvägarna för att tillämpa uteslutningen på:

parametrar: nivå: 0 sökvägar: – src ignoreErrors: – meddelande: '/Return type string of method ExampleClass :: exempel () är inte kovariant (.*). ' sökväg: src/ExempelKlass.php

Du kan välja att ange sökvägar som en uppsättning sökvägar och ersätta nyckeln för enstaka väg som visas ovan.

Valfria regler

< p>PHPStans strikthet kan justeras med en serie konfigurationsvariabler. Dessa låter dig finjustera de kontroller som görs, utanför nivåerna som beskrivs ovan. Några av dessa är potentiellt kontroversiella eller osannolika att de överensstämmer med alla privata stilguider, varför de är avstängda som standard.

Några inställningar som kan vara värda att aktivera inkluderar:

  • checkAlwaysTrueInstanceof – Flaggar använder instanser som alltid utvärderas till sanna.
  • checkAlwaysTrueStrictComparison – Flaggar när ett uttryck som använder === eller! == alltid utvärderas till sant.
  • checkFunctionNameCase – Säkerställer att höljet med funktionsnamn matchar deras definition när det kallas genom hela kodbasen.
  • polluteScopeWithLoopInitialAssignments – När den är inställd på falsk (det är sant som standard) hindras variabler som deklareras i initiala loop -satser (t.ex. $ i i $ för ($ i = 1; $ i & lt; 10; $ i ++)) från att nås utanför slingans kodblock, för att undvika eventuell förorening av överordnad omfattning.
  • reportStaticMethodSignatures – Tvingar fram fullständig typkontroll av parametrar och returtyper i statiska metoder när de åsidosätts av en barnklass.

Annonsering

Komplett information om dessa valfria inställningar – och många fler – finns inom PHPStans konfigurationsreferens.

Slutsats

Det är slutet på vår introduktion till PHPStan. Det hjälper dig att ha förtroende för din kodbas och belyser eventuella problem innan de blir ett problem i produktionen.

PHPStan är så snabb att installera att det verkligen inte finns någon anledning att inte använda den, särskilt när du arbetar med en modern starkt kodad kodbas. Låt dig inte luras att tro att den kan ersätta manuell testning. PHPStan kan skryta med ett stort sortiment av kontroller men det kan inte identifiera logiska problem och förstår inte ditt projekts affärsregler. Det är bara en annan tillgång i verktygslådan när du bedömer en kodbas hälsa och fungerar tillsammans med betrodda följeslagare som enhetstester och funktionalitetstest från början till slut.