Blog

PHP Kwaliteit tools deel 1: PHP CodeSniffer

Wanneer je PHP code schrijft is code kwaliteit van groot belang voor de doorontwikkeling van je Software. Mede (toekomstige) ontwikkelaars kunnen jouw geschreven code beter lezen en begrijpen wanneer iedereen op dezelfde manier code programmeert. De manier van programmeren kan worden vastgelegd in Code standaarden. Voorbeelden van PHP Code standaarden zijn PSR-12 en de  WordPress Coding Standards. Standaarden zijn echter lastig te handhaven wanneer hier niet continu op wordt gelet. PHP CodeSniffer is een tool waarmee je snel een gemakkelijk nieuwe code kunt checken of deze voldoet aan jouw gewenste standaard.

PHP CodeSniffer installatie

Op de pagina van PHP CodeSniffer staat beschreven hoe je deze tool op verschillende manieren kunt installeren. In mijn geval zal ik de tool via composer installeren op mijn ontwikkel platform PHP Storm. PHP Code Sniffer kun je met het volgende commando installeren:

				
					composer global require "squizlabs/php_codesniffer=*"
				
			

Heb je dit gedaan, dan kun je de code via de commandline al checken op een aantal PHP code standaarden.Via het onderstaande commando kun je zien welke standaarden er zijn geïnstalleerd:

				
					phpcs -i
				
			

Vervolgens kun je de code checken met het commando:

				
					phpcs --standard=[Name of the Standard] [PathName]
				
			

PHP CodeSniffer geeft dan een lijst met coderegels die niet voldoen aan de standaard. Deze kan je vervolgens aanpassen en het commando opnieuw draaien totdat alle regels voldoen aan de standaard.

phpcbf, automatisch code verbeteren

Naast het commando phpcs levert PHP CodeSniffer ook het commando phpcbf. Met het phpcbf commando kun je veel code standaard fouten automatisch oplossen. Het is aan te raden om dit te doen voordat je phpcs commando runt zodat deze alleen de fouten toont die je handmatig moet oplossen.

				
					phpcbf --standard=[Name of the Standard] [PathName]
				
			

Code afwijkend van de standaard toelaten

Soms kan het echter voorkomen dat je code moet schrijven waarvan je weet dat het afwijkt de standaard. Bijvoorbeeld omdat je eigen PHP Class moet verwijzen naar een interface die niet werkt volgens de standaard. Om ervoor te zorgen dat je de fouten niet continu te zien krijgt, kun je in PHP CodeSniffer via comments niet laten checken. De belangrijkste comments vind je hieronder. Meer informatie hierover kun je vinden op https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#ignoring-parts-of-a-file.

1. Negeer code op de volgende regel

				
					// phpcs:ignore
$foo = [1,2,3];
				
			

2. Negeer code op dezelfde regel

				
					$foo = [1,2,3]; // phpcs:ignore
				
			

3. Negeer code op meerdere regels

				
					// phpcs:disable 
$xmlPackage = new XMLPackage;
$xmlPackage['error_code'] = get_default_error_code_value();
$xmlPackage->send();
// phpcs:enable
				
			

4. Negeer een bepaalde foutmelding in de code

				
					// phpcs:ignore Squiz.Arrays.ArrayDeclaration.SingleLineNotAllowed
$foo = [1,2,3];
				
			

Extra code standaarden toevoegen

PHP CodeSniffer kan na installatie op een aantal code standaarden controleren. Maar sommige frameworks gebruiken echter hun afwijkende coderingen. Je kunt deze toevoegen aan PHP CodeSniffer. Een voorbeeld hiervan zijn de WordPress code standaarden.

WordPress Code Standaarden installeren

Op https://github.com/WordPress/WordPress-Coding-Standards vind je alle informatie over het installeren deze standaard. In het kort installeer je eerst de standaard op je pc via git.

				
					git clone git://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git /pathto/CodeSniffer/Standards/WordPress-Coding-Standards
				
			

De bestanden kunnen nu al goed worden ingelezen door phpcs. Dit kun je controleren met het commando “phpcs -i”. Mocht WordPress er niet tussen staan dan kun je het volgende commando nog doen.

				
					 phpcs --config-set installed_paths /path/to/wpcs
				
			

Eenmaal gevonden kun je jouw code checken met WordPress standaarden

				
					phpcs --standard=WordPress [PathName]
				
			

Code standaarden aanpassen

Wil je code standaarden aanpassen omdat je met je collega’s andere afspraken hebt gemaakt, dan kun je deze standaarden via een config file in je project aanpassen. Zet in de root van je project een  bestand genaamd .phpcs.xml, phpcs.xml, .phpcs.xml.dist, of phpcs.xml.dist. In dit bestand kun je een eigen ruleset aangeven. Welke instellingen je kunt doen kun je lezen op https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-Ruleset. Een voorbeeld van zo’n ruleset bestand vind je op https://raw.githubusercontent.com/squizlabs/PHP_CodeSniffer/master/phpcs.xml.dist

PHP CodeSniffer integratie met PHPStorm

PHP CodeSniffer kan met vele ontwikkelomgeving worden geïntegreerd. PHPStorm (mijn tool) is er daar één van. Als je PHP CodeSniffer al hebt geïnstalleerd zoals hierboven staat beschreven dan hoe je via de PHPStorm Settings alleen het volgende te doen:

  1. Via PHP > Qualitytools verwijs je naar de directorie met phpcs (voor windows is dit phpcs.bat)
  2. Verwijs ook naar de directorie met phpcbf (voor windows is dit phpcbf.bat)
  3. Klik op de validate knop om zeker te weten dat alles goed staat.
  4. Werkt alles, klik dan op de link PHP_Codesniffer Inspection die op dit scherm staat.
  5. Vink PHP CodeSniffer inspections aan en selecteer de gewenste code standaard 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-php-code-sniffer.html voor meer informatie.

php codesniffer phpstorm integratie

Gerelateerde artikelen