In dit deel ga ik de tool PHPStan bespreken, een code analyse tool voor PHP. PHPStan analyseert de code tijdens het schrijven en wijst je op mogelijke fouten. Denk hierbij aan bijvoorbeeld dat je een integer variabele als een string gebruikt of dat je invoervelden niet checkt op vreemde onveilige invoer. Met een statische analyse tool voorkom je veel voorkomende programmeerfouten voordat ze echt bugs worden.
PHPStan installatie
Op de pagina van PHPStan staat beschreven hoe je deze tool kunt installeren. In mijn geval zal ik de tool via composer installeren op mijn ontwikkel platform PHP Storm. PHPStan kun je met het volgende commando installeren:
composer require --dev phpstan/phpstan
LET OP: PHPStan heeft minimaal PHP versie 7.2 of hoger nodig om te draaien.
Hier kun je PHPStan al via de command-line runnen door het volgende commando in je terminal te geven:
vendor/bin/phpstan analyse [directorie]
PHPStan voert vervolgens een code analyse uit en komt met een lijst met mogelijke problemen. Aan jou de taak om deze te fixen. En als je de onderstaande melding krijgt weet je dat de code weer een stukje beter is geworden.

PHPStan configuratie
Wil je bepaalde instellingen voor je hele project instellen, dan kun je dit doen door een configuratie-bestand “phpstan.neon.dist” in je root van je project te zetten. Een voorbeeld hiervan zie je hieronder. Meer informatie hierover vind je op https://phpstan.org/config-reference
parameters:
level: 5
checkMissingIterableValueType: false
inferPrivatePropertyTypeFromConstructor: true
treatPhpDocTypesAsCertain: false
reportUnmatchedIgnoredErrors: false
paths:
- src
- tests
Stub files
In code wordt vaak verwezen naar externe libraries van derde partijen. Als PHPStan normaal een functie hiervan niet kan vinden geeft hij dit aan als een error terwijl dit niet het geval is (false positive). Om ervoor te zorgen dat deze fouten niet worden gedecteerd kun je een “stub file” maken. In dit bestand staan alle verwijzingen naar methodes en klassen van de externe library zonder code. Een stub file kun je maken met de tool php stub generator. Deze stub file kun je vervolgens in je project zetten en in PHPStan configuratie bestand zetten.
PHPStan extensions

Een van de voordelen van PHPStan is dat deze uitbreidbaar is voor vele PHP frameworks en systemen zoals Laravel, Drupal, Symfony en WordPress. Hiermee kunnen ontwikkelaars hun code checken op de best practices van een bepaald ontwikkelplatform en worden specifieke stub-files meegeleverd.
PHPStan foutmeldingen negeren
Net als bij PHP Codesniffer is het mogelijk om bepaalde errors in je code te negeren. Dit zou kunnen doordat je bijvoorbeeld weet dat PHPStan niet weet dat een gebruikte methode veilig is. Je kan dan via comments en in de configuratie file aangeven dat bepaalde code of foutmeldingen niet hoeven te worden gecheckt. Op https://phpstan.org/user-guide/ignoring-errors kun je hier meer over lezen. De belangrijkste vind je hieronder.
1. Negeer code op de volgende regel
/** @phpstan-ignore-next-line */
echo $foo;
2. Negeer code op dezelfde regel
echo $foo; // @phpstan-ignore-line
3. Negeer foutmeldingen in je configuratie
parameters:
ignoreErrors:
- '#Call to an undefined method [a-zA-Z0-9\\_]+::doFoo\(\)#'
PHPStan integratie met PHPStorm
PHPStan kan met vele ontwikkelomgeving worden geïntegreerd. PHPStorm (mijn tool) is er daar één van. Als je PHPStan hebt geïnstalleerd in je project, dan hoef je via de PHPStorm Settings alleen het volgende te doen:
- Via PHP > Qualitytools verwijs je naar de directorie (in vendor/bin van je project) met phpstan (voor windows is dit phpstan.bat).
- Klik op de validate knop om zeker te weten dat alles goed staat.
- Werkt alles, klik dan op de link PHPStan Inspection die op dit scherm staat.
- Vink PHPStan inspections aan en selecteer de gewenste configuratie file en sla de wijzigingen op
Als het goed is zie je nu tijdens het coderen allerlei aanwijzigingen hoe je de code kunt aanpassen aan de gewenste standaard. Mocht je er niet uitkomen kijk dan op https://www.jetbrains.com/help/phpstorm/using-phpstan.html voor meer informatie.
