După șase ani de dezvoltare, a fost lansată prima versiune stabilă a analizadorului static PHPStan 1.0, care permite identificarea erorilor în codul scris în PHP fără a-l executa și fără a utiliza teste unitare. Codul proiectului este scris în PHP și este distribuit sub licența MIT.
Analyzerul oferă 10 niveluri de verificare, fiecare nivel ulterior extinzând capacitățile precedentului și furnizând verificări mai stricte:
Exemple de probleme de bază identificate:
- Existența claselor utilizate în instanceof, catch, typehints și alte construcții ale limbii.
- Existența și disponibilitatea metodelor și funcțiilor apelabile, precum și numărul argumentelor transmise.
- Verificarea returnării datelor de către metodă cu același tip care este definit în expresia return.
- Existența și vizibilitatea proprietăților la care se face referire, precum și verificarea tipurilor de date declarate și efective utilizate în proprietăți.
- Corectitudinea numărului de parametri transmiși în apelurile sprintf/printf în blocul de formatare a șirurilor.
- Existența variabilelor în funcție de blocurile formate de operatorii de ramificare și ciclu.
- Conversii de tip inutile (de exemplu, „(string) ‘foo’”) și verificări stricte („===” și „!==”) a datelor cu tipuri și operanzi diferiți, care returnează întotdeauna false.
Inovațiile cheie PHPStan 1.0:
- A fost implementat nivelul de verificare „9”, care efectuează verificări ale utilizării tipului „mixed”, destinat organizării recepției funcției parametrilor cu diferite tipuri. Nivelul nouă identifică metodele nesigure de utilizare a „mixed”, cum ar fi transmiterea valorilor de tip „mixed” către un alt tip, apelarea metodelor cu tipul „mixed” și accesarea proprietăților acestuia, deoarece ele pot să nu existe.
- Managementul verificării identității valorilor de retur pentru apeluri identice de funcție folosind anotările @phpstan-pure și @phpstan-impure.
- Analiza tipurilor în construcții try-catch-finally folosind anotările @throws.
- Identificarea anumitor proprietăți interne (private), metode și constante, care sunt definite, dar neutilizate.
- Transmiterea apelurilor callback incompatibile în funcțiile de manipulare a array-urilor, cum ar fi array_map și usort.
- Inspectarea tipurilor pentru absența anotărilor typehint.
- A fost asigurată compatibilitatea descrierilor de tip cu PHPDocs, ceea ce permite utilizarea tipurilor din mesajele de eroare în PHPDocs.
Sursa: opennet.ro
