Nakon šest godina razvoja, došlo je do prvog stabilnog izdanja statičkog analizatora PHPStan 1.0, koji omogućava pronalaženje grešaka u PHP kodu bez njegovog izvršavanja i korištenja jediničnih testova. Kod projekta je napisan u PHP-u i distribuiran pod MIT licencom.
Analizator pruža 10 nivoa provjere, u kojima svaki sljedeći nivo proširuje mogućnosti prethodnog i pruža strože provjere:
Primjeri identificiranih osnovnih problema:
- Postojanje klasa koje se koriste u instanceof, catch, typehints i drugim jezičkim konstrukcijama.
- Postojanje i dostupnost pozvanih metoda i funkcija, kao i broj proslijeđenih argumenata.
- Provjera da li metoda vraća podatke istog tipa kao što je definirano u izrazu za povratak.
- Postojanje i vidljivost svojstava kojima se pristupa i provjera deklariranih i stvarnih tipova podataka koji se koriste u svojstvima.
- Broj parametara proslijeđenih sprintf/printf pozivima u bloku za formatiranje niza je tačan.
- Postojanje varijabli koje uzimaju u obzir blokove formirane operatorima grananja i petljama.
- Beskorisno pretvaranje tipova (npr. "(string) 'foo'") i strogi testovi ("===" i "!==") na podacima s različitim tipovima i operandima koji uvijek vraćaju false.
Ključne inovacije u PHPStan 1.0:
- Implementiran je nivo provjere „9“ koji provjerava upotrebu „mješovitog“ tipa, namijenjenog organizaciji prijema parametara funkcije s različitim tipovima. Nivo XNUMX identifikuje nesigurne upotrebe "mešovitog", kao što je prosleđivanje vrednosti tipa "mešano" drugom tipu, pozivanje metoda tipa "mešano" i pristupanje njegovim svojstvima jer možda ne postoje.
- Kontrolirajte da li su povratne vrijednosti identične za identične pozive funkcija pomoću napomena @phpstan-pure i @phpstan-impure.
- Analiza tipa u konstrukcijama try-catch-finally koristeći @throws napomene.
- Identifikacija definiranih, ali neiskorištenih internih (privatnih) svojstava, metoda i konstanti.
- Prosljeđivanje nekompatibilnih povratnih poziva funkcijama niza kao što su array_map i usort.
- Inspekcija tipa za nedostajuće napomene o tipu.
- Napravljene deklaracije tipa kompatibilne sa PHPDocs-ima, dozvoljavajući tipove iz poruka o grešci da se koriste u PHPDocs-u.
izvor: opennet.ru