Blog

PHP Kwaliteit tools deel 2: PHPStan

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 no error message

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

PHPStan voor WordPress

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:

  1. Via PHP > Qualitytools verwijs je naar de directorie (in vendor/bin van je project) met phpstan (voor windows is dit phpstan.bat).
  2. Klik op de validate knop om zeker te weten dat alles goed staat.
  3. Werkt alles, klik dan op de link PHPStan Inspection die op dit scherm staat.
  4. 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.

Gerelateerde artikelen