PSR-0,1,2, nichts dabei!

phpMir ist klar dass der Titel dieses Post erstmal Verwirrung stiftet. Denn es hat wieder mit den unmöglichen Tiefen von PHP zu tun, und zwar mit einem Standard. Bis vor einiger Zeit gibt es für PHP aus dem Vendor Team keinen eigenen Standard wie man PHP eigentlich schreibt – also wie man es so schreibt das es lesbar ist und bei jeden gleich aussieht.
Bis zu diesem Zeitpunkt gab es einige Versuche: Zend, Squiz, Pear. Aber das Ergebnis war nie perfekt. Andere Sprachen haben ihren Styleguide bereits dabei, z.B. PEP8 in Python. Auch wurde viel in fremden Welten geklaut, z.B. Code Conventions von Java oder die Entfremdung einiger C Stile brachte so manches Stirnrunzeln vor den Bildschirm. Nun hat die PHP Framework Interop Group mit Ihrem “propose a standards recommendation” einen sehr guten Standard rausgekurbelt der:

  1. Zu PHP passt
  2. Die Aktualität berücksichtigt
  3. Von vielen akzeptiert wird

Die PHP-FIG an sich sich ist eine Gruppe von Personen die versuchen an vielen Ecken und Enden Standards zu schaffen, an die man sich halten kann – aber nicht muss. Herausgekommen ist ein vierteiliges Werk was wiederum auf spezielle Teile von Sprachkonstrukten Einfluss nimmt:

Über PSR-3 lässt sich streiten aber 0-2 sind super umgesetzt  und integriert sich sinnvoll in die Sprache. Nicht zuletzt wird der Standard von vielen Tools bereits unterstützt: PHP CodeSniffer oder PHPStorm, Eclipse. Und viele Projekte sind bereits damit umgesetzt, http://packagist.org feststellen kann.
So schaut es gut aus:

$ phpcs --standard=PSR2 Process.php
Time: 0 seconds, Memory: 6.25Mb
.
 *
 * @author Marius Hein 
 * @copyright 2012-2013 NETWAYS GmbH 
 */
namespace NETWAYS\IO;
/**
 * Specific implementation to FO
 * @package NETWAYS\IO
 * @author Marius Hein 
 */
class FileObject extends \SplFileObject
{
    /**
     * Integrate chmod on that file
     * @param int $mode
     * @return bool
     */
    public function chmod($mode)
    {
        return chmod($this->getRealPath(), $mode);
    }
}
Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Unlesbarer Code – Kein Problem!

Wie bereits im PHPCS Artikel erwähnt sind Codingstandards nützlich und wichtig. Oftmals sind sie allerdings auch zu detailliert und erschweren den Entwicklern flüssiges arbeiten. Jeder entwickelt im Lauf der Zeit seine persönlichen Nuancen z.B. in Hinsicht auf Leerzeichen und Leerzeilen. Um den Code danach zu homogenisieren gibt es einen Haufen an Tools. Einige sind bereits in der IDE vorhanden, andere tummeln sich wie Tidy im Internet und wieder andere sind nur für ganz bestimmte Sprachen.
Meistens aber folgen sie einem bestimmten Regelset welches starr den Quelltext nach entsprechenden Standards wie z.B. K&R oder Allman verbiegt.
Wer unabhängig (und vor allem schnell) seinen Code formatieren möchte greift zu Tools wie Artistic Style. In C++ geschrieben ändern es die komplette Code Basis innerhalb einer Sekunde und ermöglicht dem Benutzer durch feine Abstimmung seinen Standard zu implementieren und in einer Konfiguration abzulegen:

# Default bracket style
--brackets=attach
--style=java
--mode=java
# Statements
--indent-switches
--indent-cases
--min-conditional-indent=1
--max-instatement-indent=40
--break-blocks
--unpad-paren
--align-reference=name
--pad-header
# Break simple if statements into bracket style
--add-brackets
# Spaces with tabstop 4
-s4
# Comments
--indent-col1-comments
# Line endings
--lineend=linux
# errors
--ignore-exclude-errors

Die obere Konfiguration setzt in etwa die Oracle Java Coding Conventions für PHP um. Diese lässt sich dann einfach mit

astyle --options=astyle.conf test.php

auf die entsprechende Datei anwenden. Astyle ist als Paket bereits bei vielen Distros dabei. Allerdings lässt sich es auch ohne Probleme aus den Quellen kompilieren.

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.