Coding Standards in PHP mit PHP CS Fixer
Um PHP Code nach einem einheitlichem Schema und fest definierten Coding Standards zu schreiben, lässt sich mit Hilfe von PHP-CS-Fixer der Code auf Fehler in der Formatierung prüfen und automatisiert nach einem festem Regelwerk wie z.B PSR-2 formatieren.

Nicht nur in eigenen Projekten ist es sinnvoll, den Code nach Coding Standards zu formatieren und einem zuvor festgelegtem Regelwerk zu folgen. Gerade viele Open-Source Projekte achten penibel darauf, dass der Code allgemeinen Coding Standards (z.B PSR-1, PSR-2, usw) folgt. Tools wie StyleCI stellen dabei sicher, dass auch Code, der gegen definierte Regeln verstößt, automatisiert formatiert wird. Mit Hilfe von PHP CS Fixer lässt sich der Code aber bereits während der Entwicklung in der lokalen Entwicklungsumgebung formatieren.

PHP-CS-Fixer installation

Installation via composer

Zunächst wird PHP CS Fixer lokal auf der Entwicklungsumgebung via composer installiert:

composer global require friendsofphp/php-cs-fixer

Ist composer nicht installiert, lässt sich sich die .phar Datei von PHP-CS-Fixer auch direkt installieren. Siehe hierzu die Installationsanleitung auf GitHub.

Je nach Konfiguration ist es noch eventuell noch notwendig, die PATH Variable anzupassen, damit PHP CS Fixer global verwendet werden kann:

export PATH="$PATH:$HOME/.composer/vendor/bin"

Konfigurationsdatei anlegen

Die Konfigurationsdatei kann wahlweise global oder pro Projekt angelegt werden. Der Inhalt der Konfigurationsdatei lautet wie folgt:

<?php

$finder = PhpCsFixer\Finder::create()
    ->notPath('vendor')
    ->in(__DIR__)
    ->name('*.php')
    ->ignoreDotFiles(true)
    ->ignoreVCS(true);

return PhpCsFixer\Config::create()
    ->setFinder($finder)
    ->setRiskyAllowed(false)
    ->setRules([
        '@Symfony' => true,
        '@PSR2' => true,
        'array_syntax' => ['syntax' => 'short'],
        'binary_operator_spaces' => ['align_equals' => false, 'align_double_arrow' => true],
        'concat_space' => ['spacing' => 'one'],
        'heredoc_to_nowdoc' => true,
        'no_multiline_whitespace_before_semicolons' => true,
        'no_unused_imports' => true,
        'no_useless_return' => true,
        'not_operator_with_successor_space' => true,
        'ordered_imports' => true,
        'phpdoc_add_missing_param_annotation' => true,
        'phpdoc_order' => true,
        'unary_operator_spaces' => false
    ]
);

Mit dieser beispielhaften Konfiguration wird der PHP Code z.B sowohl nach den PSR-2 als auch nach den etwas ausführlicheren Symfony-Coding Standards formatiert. Darüber hinaus gibt es noch einige weitere Einstellungen, wie z.b die Schreibweise für Arrays oder die alphabetische Sortierung der use-Statements.

Diese Konfiguration kann nach Belieben angepasst werden. Eine Übersicht aller Validierungsregeln ist ebenfalls auf Github zu finden.

Nutzung in der Konsole

Nachdem die Konfigurationsdatei mit den Validierungsregeln angelegt wurde, ist PHP CS Fixer bereit zum Einsatz. Um das Tool in der Konsole zu verwenden, gibt es verschiedene Möglichkeiten:

  1. Test und Anzeige der Code Violations ohne automatische Formatierung des Codes

Um PHP Code lediglich auf Fehler zu überprüfen, ist folgender Befehl zu verwenden:

php-cs-fixer fix -vv --dry-run --config=~/.php_cs DIR_OR_FILE

Durch die Angabe die Option --dry-run wird der Code nicht automatisch formatiert, sondern lediglich auf eventuelle Validierungsfehler überprüft.

  1. Automatische Formatierung des Codes über die Konsole

Damit PHP CS Fixer den Code automatisch anhand der definierten Validierungsregeln formatiert, ist folgender Befehl zu verwenden:

php-cs-fixer fix -vv --config=~/.php_cs DIR_OR_FILE

In beiden Fällen lässt sich über die Option --config der Pfad zu der Konfigurationsdatei angeben, in der die Validierungsregeln definiert sind. Als letzter Parameter wird der Pfad zur Datei bzw. zum Ordner übergeben, für den PHP CS Fixer die Validierung anwenden soll.

Konfiguration in PHPStorm

Damit PHP CS Fixer auch direkt während der Entwicklung in PHPStorm den Code entsprechend formatiert, lässt sich PHP CS Fixer als externes Tool in PHPStorm einrichten.

Dazu wird in den Einstellungen im Bereich Tools → External Tools ein neuer Eintrag hinzugefügt:

Name: PHP CS Fixer
Description: Apply PHP CS Fixer to the current file
Programm: ~/.composer/vendor/friendsofphp/php-cs-fixer/php-cs-fixer
Parameters: fix $FileDir$/$FileName$ --config=~/.php_cs
Working Directory: $ProjectFileDir$

In den Advanced Options ist noch die Option Open console for tool output zu deaktivieren, damit PHP CS Fixer im Hintergrund genutzt werden kann. Natürlich kann die Konsole auch aktiviert bleiben, um ggf. die Fehlerausgabe zu sehen.

Nachdem der Eintrag hinzugefügt wurde, ist PHP CS Fixer im Menü unter Tools → External Tools → PHP CS Fixer zu finden. Bei Bedarf lässt sich dem Tool noch ein Tastenkürzel zuweisen.

Wenn PHP CS Fixer pro Projekt installiert wurde, sind die Pfade für PHP CS Fixer und die Konfigurationsdatei noch anzupassen.

Fazit

Mit Hilfe von PHP CS Fixer lässt sich der eigene Programmcode schnell und unkompliziert gegen ein festes Regelwerk formatieren. So ist sichergestellt, dass der Programmcode immer ein einheitliches Format aufweist, was insbesondere dann zum Tragen kommt, wenn mehrere Entwickler parallel am Code arbeiten. Jeder Entwickler hat einen eigenen Stil und wenn der Code grundlegend einheitlich formatiert ist und definierte Coding Standards einhält, fällt die Bearbeitung von fremdem Codes zumindest ein wenig leicher.