Na zes jaar ontwikkeling is de eerste stabiele versie van de statische analyser PHPStan 1.0 gepresenteerd. Deze maakt het mogelijk om fouten in PHP-code te vinden zonder deze uit te voeren of unit-tests te gebruiken. De code van het project is geschreven in PHP en wordt verspreid onder de MIT-licentie.
De analyzer biedt 10 niveaus van controle, waarbij elk volgend niveau de mogelijkheden van het vorige uitbreidt en strengere controles biedt:
Voorbeelden van geïdentificeerde basisproblemen:
- Het bestaan van klassen die worden gebruikt in instanceof, catch, typehints en andere taalkundige constructies.
- Het bestaan en de beschikbaarheid van aanroepbare methoden en functies, evenals het aantal doorgegeven argumenten.
- Controle of een methode gegevens retourneert met hetzelfde type als gedefinieerd in de return-uitdrukking.
- Het bestaan en de zichtbaarheid van eigenschappen die worden aangesproken, evenals de controle van de gedeclareerde en feitelijke datatypes die worden gebruikt in die eigenschappen.
- De juistheid van het aantal parameters dat in sprintf/printf-aanroepen is doorgegeven in het strformatteerblok.
- Het bestaan van variabelen rekening houdend met blokken die worden gevormd door vertakking- en lussnelheidsconstructies.
- Nutteloze typeconversies (bijvoorbeeld '(string) 'foo'') en strikte controles ('===' en '!==') van gegevens met verschillende types en operandwaarden die altijd false retourneren.
Belangrijke vernieuwingen in PHPStan 1.0:
- Het niveau 9 van de controle is geïmplementeerd, dat controles uitvoert op het gebruik van het type "mixed", bedoeld voor het aannemen van parameters met verschillende types. Het negende niveau identificeert onveilige manieren van gebruik van "mixed", zoals het doorgeven van waarden van het type "mixed" aan een ander type, het aanroepen van methoden met het type "mixed" en het aanspreken van zijn eigenschappen, aangezien deze mogelijk niet bestaan.
- Beheer van de controle van de identiteit van de geretourneerde waarden voor identieke functie-aanroepen met gebruik van de annotaties @phpstan-pure en @phpstan-impure.
- Type-analyse in try-catch-finally-constructies met gebruik van de annotaties @throws.
- Detectie van bepaalde, maar ongebruikte interne (private) eigenschappen, methoden en constanten.
- Doorgeven van incompatibele callback-aanroepen in functies die met arrays werken, zoals array_map en usort.
- Inspectie van types voor ontbrekende typehint-annotaties.
- De compatibiliteit van type-omschrijvingen met PHPDocs is gewährleistet, waardoor het mogelijk is om in PHPDocs types uit foutmeldingen te gebruiken.
Bron: opennet.ru
