Efter seks års udvikling fandt den første stabile udgivelse af den statiske analysator PHPStan 1.0 sted, som giver dig mulighed for at finde fejl i PHP-kode uden at udføre den og bruge enhedstests. Projektkoden er skrevet i PHP og distribueret under MIT-licensen.
Analysatoren giver 10 kontrolniveauer, hvor hvert efterfølgende niveau udvider mulighederne for det foregående og giver mere stringente kontroller:
Eksempler på underliggende identificerede problemer:
- Eksistensen af klasser, der bruges i instanceof, catch, typehints og andre sprogkonstruktioner.
- Eksistensen og tilgængeligheden af metoder og funktioner, der kaldes, samt antallet af beståede argumenter.
- Kontrollerer, at metoden returnerer data med samme type som defineret i returudtrykket.
- Eksistensen og synligheden af de egenskaber, der tilgås, og kontrol af de erklærede og faktiske datatyper, der bruges i egenskaberne.
- Antallet af parametre, der sendes til sprintf/printf-kald i strengformateringsblokken, er korrekt.
- Eksistensen af variabler, der tager højde for blokke dannet af forgrenende operatører og sløjfer.
- Ubrugelige typeafstøbninger (f.eks. "(streng) 'foo'") og strenge tests ("===" og "!==") på data med forskellige typer og operander, der altid returnerer falsk.
Vigtigste innovationer i PHPStan 1.0:
- Kontrolniveauet "9" er implementeret, som kontrollerer brugen af typen "blandet", beregnet til at organisere funktionens modtagelse af parametre med forskellige typer. Niveau XNUMX identificerer usikker brug af "blandet", såsom at overføre værdier af typen "blandet" til en anden type, kalde metoder af typen "blandet" og få adgang til dets egenskaber, fordi de muligvis ikke eksisterer.
- Kontroller, om returværdier er identiske for identiske funktionskald ved hjælp af @phpstan-pure og @phpstan-impure annoteringerne.
- Typeanalyse i try-catch-finally-konstruktioner ved hjælp af @throws-annoteringer.
- Identifikation af definerede, men ubrugte interne (private) egenskaber, metoder og konstanter.
- Sender inkompatible tilbagekald til array-funktioner såsom array_map og usort.
- Typekontrol for manglende typehint-anmærkninger.
- Lavede typeerklæringer kompatible med PHPDocs, hvilket tillod typer fra fejlmeddelelser at blive brugt i PHPDocs.
Kilde: opennet.ru