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:
- Via PHP > Qualitytools verwijs je naar de directorie met phpcs (voor windows is dit phpcs.bat)
- Verwijs ook naar de directorie met phpcbf (voor windows is dit phpcbf.bat)
- Klik op de validate knop om zeker te weten dat alles goed staat.
- Werkt alles, klik dan op de link PHP_Codesniffer Inspection die op dit scherm staat.
- 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.
