am 27. April 2011
Zuallererst: eine gute Dokumentation schreiben ist echt keine leichte Aufgabe. Mich nervt es seit Tagen, dass ich auf keine tolle Struktur komme, was die Doku und das Handbuch zu LiveTest angeht. Doofe Sache das. Aber ich will euch ja nicht nerven … außer es liest ein technischer Redakteur mit, der soll sich mal bei mir melden. Aber jetzt zum eigentlichen Thema.
PHP 5.3 ist jetzt auch schon wieder zwei Jahre alt und ich glaube, ich habe kaum einen Artikel über die “neuen” Features geschrieben, was ich rückblickend komisch finde. Aber was soll’s schreiben wir einfach heute etwas zu Namespaces. Namespaces sind eine feine Sache und jeder der die neuste PHP-Version einsetzt, sollte sie auch nutzen. Die IDEs unterstützen dabei auch bereits ungemein. Die Tipparbeit ist also überschaubar und der Code ist irgendwie leichter.
Worüber wir heute reden wollen, ist der Verzeichnisstruktur, wie man Klassen in Namespaces ablegt. PHP selbst gibt da nichts vor und wie immer kann man hier seinen eigenen Autoloader schreiben, der macht was man will. Ich könnte zum Beispiel den Klassennamen mit md5 verschlüsseln und “.php” anhängen. Wäre aber irgendwie nicht intuitiv, also lassen wir das lieber. Aber wie gesagt, ich kann mir da jede mögliche Schweinerei vorstellen. Da wir aber nicht nur für uns alleine programmieren und auch andere unseren Code nachvollziehen können sollen, sollte man sich auch hier an einen Standard halten. In diesem Fall heißt dieser PSR-0 und wurde von ein paar klugen Köpfen entworfen.
Prinzipiell ist es ganz einfach und wer mit dem Zend Framework erste Erfahrungen gemacht hat, dem kommen sicherlich ein paar Dinge bekannt vor. Nehmen wir einen Klassennamen samt Namespace phm\LiveTest\Writer\Html. Der Klassenname wäre in diesem Fall Html und der Namespace phm\LiveTest\Writer. Diese Klasse müsste laut Standard hier liegen: Pfad/zur/Bibliothek/phm/LiveTest/Writer/Html.php. Die Regeln zum bilden sind recht einfach und können auf der Standardseite nachgelesen werden. Die wichtigsten drei stellen wir aber hier auch noch mal kurz vor:
- Der Namespacetrenner wird durch einen Verzeichnistrenner ersetzt
- Vorangestellt wird der Vendorname, also sozusagen euer Kürzel (phm steht hier übrigens für phphatesme)
- Wir hängen am Ende ein .php an den Namen
Hält man sich an diese drei Regeln, dann hat man zum Beispiel den Vorteil jede Menge guter Autoloader verwenden zu können, denn diese unterstützen (fast) alle diese Bildungsweise.Das war auch schon der kurze Ausflug ins Land der Namespaces und wie immer gilt, wer Fragen hat: fragen.