Efter seks års udvikling er den første stabile udgave af PHPStan 1.0, en statisk analyser, der muliggør at finde fejl i PHP-kode uden at udføre den og uden brug af unit-tests, blevet lanceret. Projektets kode er skrevet i PHP og distribueres under MIT-licensen.
Analysatoren tilbyder 10 niveauer af kontrol, hvor hvert efterfølgende niveau udvider mulighederne i det forrige og leverer strengere kontroller:
Eksempler på identificerede grundlæggende problemer:
- Eksistensen af klasser, der anvendes i instanceof, catch, typehints og andre sprogkonstruktioner.
- Eksistensen og tilgængeligheden af kaldte metoder og funktioner, samt antallet af overførte argumenter.
- Kontrol af, at metoden returnerer data med den samme type, der er defineret i return-udtrykket.
- Eksistensen og synligheden af egenskaber, der tilgås, samt kontrol af de deklarerede og faktiske datatyper, der anvendes i egenskaber.
- Korrektheden af antallet af parametre, der er overført til opkald af sprintf/printf i tekstformatblokken.
- Eksistensen af variabler under hensyntagen til blokke dannet af betingelses- og løkkestrukturer.
- Unyttige typecastinger (for eksempel «(string) 'foo'») og strenge tjek («===» og «!==») af data med forskellige typer og operander, der altid returnerer værdien false.
Nøgleinnovationer i PHPStan 1.0:
- Implementeret kontrolniveau «9», der udfører tjek af brugen af typen «mixed», beregnet til at tage imod parametre af forskellige typer i funktionen. Det niende niveau afslører usikre måder at bruge «mixed» på, såsom at overdrage værdier af typen «mixed» til en anden type, kalde metoder med typen «mixed» og tilgå dets egenskaber, da de måske ikke eksisterer.
- Styring af identitetstjek for returnerede værdier ved samme funktion kald med brug af annotationerne @phpstan-pure og @phpstan-impure.
- Typeanalyse i try-catch-finally konstruktioner med brug af annotationerne @throws.
- Identifikation af bestemte, men ubrugte interne (private) egenskaber, metoder og konstanter.
- Overdragelse af inkompatible callback-kald til array-håndteringsfunktioner, såsom array_map og usort.
- Typeinspektion for manglende typehint-annotationer.
- Sikret kompatibilitet af typeskildringer med PHPDocs, hvilket muliggør brug af typer fra fejlmeddelelser i PHPDocs.
Kilde: opennet.ru
