10 PHP
In der Kategorie PHP finden Sie einige Klassen, die den Umgang bzw. die Arbeit mit PHP deutlich vereinfachen können.
10.1 PHP_Beautifier 

Besprochene Version: 0.1.1 | Lizenz: PHP-Lizenz 3.0 |
Klassendatei(en): PHP/Beautifier.php |
Das Paket PHP_Beautifier sieht Funktionalitäten, vor die es Ihnen ermöglichen, eine PHP-Datei automatisch korrekt formatieren zu lassen. Angenehm ist hierbei, dass Sie recht gute Konfigurationsmöglichkeiten haben, um die resultierende Formatierung zu beeinflussen. Möchten Sie mit dem Paket arbeiten, sollten Sie die Dokumentation auf der externen Homepage der PEAR-internen vorziehen. Die externe Homepage finden Sie unter http://clbustos.dot geek.org.
Das Paket ist schon komplett auf die PHP 5-Syntax umgestellt. Insbesondere ist hiervon auch die Fehlerbehandlung betroffen, die in diesem Fall auf Exceptions basiert. Des Weiteren handelt es sich um ein reines Kommandozeilen-Tool. Eine Nutzung des Pakets über den Browser ist zurzeit nicht vorgesehen.
Nach der Installation können Sie direkt Daten umformatieren, ohne dass Sie programmieren müssen. Standardmäßig wird nämlich eine Batch-Datei bzw. ein Shell-Script installiert, das es Ihnen ermöglicht, Dateien automatisch umformatieren zu lassen.
Sie können beide Varianten in der Shell über den Befehl php_beautifier aufrufen. Um das Verhalten des Programms zu steuern, sind die Kommandozeilenoptionen aus Tabelle 10.1 definiert.
würde alle Dateien mit der Endung .php aus dem aktuellen Verzeichnis und allen untergeordneten Verzeichnissen verschönern und im Verzeichnis ./beautified/ abspeichern. Für einen Aufruf unter Windows müssten allerdings die Anführungszeichen um das *.php entfernt werden.
Geben Sie keine Ausgabe-Datei an, werden alle Daten direkt auf dem Bildschirm ausgegeben. Nutzen Sie einen Dateinamen für die Ausgabe und kein Verzeichnis, werden alle Dateien, die eingelesen wurden, in dieser einen Ausgabe zusammengefasst.
Mit -l bzw. --filters können verschiedene Filter definiert werden, die die Formatierung der Ausgabe bestimmen. Die Namen der Filter bzw. der Name des Filters wird in Anführungszeichen angegeben. Nach dem Namen folgt jeweils ein Klammerpaar, mit dem eventuell notwendige Optionen übergeben werden können. Mit -l "Pear() ArrayNested()" würden die beiden Filter Pear und ArrayNested genutzt.
Zurzeit sind die Filter Pear, ArrayNested, IndentStyles und ListClassFunction definiert.
Der Filter Pear definiert, dass eine Formatierung nach Pear-Coding-Standard vorgenommen werden soll. Interessant ist, dass dieser Filter automatisch einen Lizenz-Hinweis in den Kopf der Datei einfügen kann. Hierzu übergeben Sie dem Filter das Attribut add_header, gefolgt von einem Gleichheitszeichen und dem Namen der entsprechenden Lizenz. Zurzeit sind php, bsd, apache und lgpl mögliche Werte. Ein Aufruf könnte also beispielsweise um -l "Pear(add_header=apache)" ergänzt werden, um eine Formatierung nach PEAR-Standard durchzuführen, wobei automatisch die Apache-Lizenz eingefügt wird.
Der Filter ArrayNested unterstützt keine Parameter und dient dazu, die Formatierung von verschachtelten Arrays zu steuern. Eine Zeile wie
würde normalerweise nicht umbrochen. Bei Nutzung dieses Filters würde sich folgende Darstellung ergeben:
$daten = array( array( 1, 2 ) , "A"=>array( 3, 4, array( 9, 8 ) ) );
Mit dem Filter IndentStyles können Sie festlegen, wie die geschweiften Klammern gesetzt werden sollen. Er bekommt einen Parameter übergeben, der das Styling definiert. Mit -l "IndentStyles(style=kr)" würde die Formatierung nach Kerningham & Ritchie gewählt, die folgendermaßen aussieht:
Weitere Möglichkeiten sind bsd:
Der Filter ListClassFunction dient dazu, eine Liste der enthaltenen Klassen und Funktionen im Kopf der Datei einzufügen. Eine solche Liste sieht beispielsweise so aus:
/* * Class and Function List: * Function list: * - __construct() * - login_function() * Classes list: * - DbConnection */
Die Information, ob es sich um echte Funktionen oder Methoden einer Klasse handelt, geht hierbei leider verloren. Auch Parameter oder Schlüsselwörter wie private oder public werden nicht mit übernommen. Per Vorgabe wird eine Liste der Klassen und Funktionen erzeugt. Möchten Sie eine der Ausgaben unterdrücken, können Sie dem Parameter list_functions oder dem Parameter list_classes die Zahl Null übergeben.
Auf Basis dieses Pakets können Sie auch schnell einen eigenen Beautifier erstellen. Ein solches Script für die Nutzung in der Kommandozeile könnte aussehen wie in Listing 10.1.
#!/usr/bin/php <?php require_once('PHP/Beautifier.php'); try { // Objekt ableiten $Beauty = new PHP_Beautifier(); // Eingabedatei festlegen $Beauty->setInputFile('quelle.php'); // Ausgabedatei festlegen $Beauty->setOutputFile('ausgabe.php'); // Einrueckungszeichen definieren $Beauty->setIndentChar(' '); // Weite der Einrueckung festlegen $Beauty->setIndentNumber(4); // Zeilenumbruch festlegen $Beauty->setNewLine("\n"); // Filter ArrayNested hinzufuegen $Beauty->addFilter('ArrayNested'); // Filter PEAR mit php-Lizenz hinzufuegen $Beauty->addFilter('Pear',array('add_header'=>'php')); // Datei abarbeiten $Beauty->process(); // Daten auf dem Bildschirm ausgeben $Beauty->show(); // Datei speichern $Beauty->save(); } catch (Exception $err) { echo $err; } ?>
Listing 10.1 Selbst erstellter Beautifier
Ich denke, die meisten Methoden sind hier selbsterklärend, da sie weitgehend identisch mit den Kommandozeilenparametern sind. Interessant ist noch die Methode setNewLine(), mit der Sie festlegen können, welches Zeichen genutzt werden soll, um einen Zeilenumbruch in der Quelldatei darzustellen.
Der Aufruf von process() ist zwingend erforderlich, um die eigentliche Transformation durchzuführen. Danach können Sie entscheiden, was mit dem Ergebnis passieren soll. show() gibt das Ergebnis direkt auf dem Bildschirm aus, wohingegen save() das Ergebnis als Datei, in diesem Beispiel unter dem Namen ausgabe.php, abspeichert.
Möchten Sie die Ausgabe automatisch komprimieren lassen, ist die Methode setCompress() dafür vorgesehen. Sie akzeptiert die Parameter 'Tar', 'Gz' oder 'Bz2' und schaltet damit den entsprechenden Kompressionsalgorithmus zu.