am 26. August 2008
Arne Blankerts – wohl von keiner deutschsprachigen PHP Konferenz wegzudenken – hielt diesen Vortrag zum Thema Mehrsprachige Strömungen. Bis jetzt hatte ich noch nicht die Chance mich ein wenig mit der Materie eines Streamwrappers in PHP zu beschäftigen, deswegen hatte ich mir gedacht einfach mal in diesen Vortrag zu gehen, um den Mythos Stream ein wenig entzaubern zu lassen. Da ich selbst gettext verwende, um Phrasen zu übersetzen, war ich natürlich zusätzlich auch an neuen Ansätzen interessiert.
Da das Thema für mich relativ neu war, konnte ich gut die Stunde zuhören und habe auch ein paar wichtige Erkenntnisse für mich mitgenommen. Die Personen aus dem Publikum, die sich bereits mit der Thematik betraut waren oder irgendwann mal einen Streamwrapper gesehen hatten, durften nicht viel neues mitgenommen haben. Prinzipiell ging es nicht wirklich um Übersetzungen von Texten, sondern vielmehr um die Verwendung eines allgemeinen Streamwrappers. Dieser Wrapper hätte im Vortrag durch jeden x-beliebigen anderen ausgetauscht werden können. Es war also auch für mich, der eine Alternative zum Übersetzen von Texten gesucht hat, eine kleine Enttäuschung. Aber ich war ja auch an den Wrappern interessiert, also nicht ganz fehl am Platze.
Bevor ich es noch vergesse, sollte ich jetzt am besten mal mit dem Inhalt anfangen. Primär ging es also im Streamwrapper. Die Idee, die hinter einem solchem Strom steckt ist ganz einfach. Nehmen wir zum Beispiel das öffnen einer Datei, dabei ist es mir völlig egal ob diese lokal in meinem Filesystem liegt oder aber irgendwo im Internet. In PHP habe ich den Vorteil, dass ich mit fopen beide problemlos öffnen kann, ohne einen Unterschied mitzubekommen. Und genau hier sieht man schon die ersten zwei Wrapper. Der erste ist spezialisiert auf das Dateisystem, der andere kann mit http umgehen. Will ich nun ein eigenes Protokoll in PHP unterstützen, dann schreibe ich einfach einen neuen Wrapper, registriere ihn und sofort kann fopen auch dieses Protokoll verstehen und mir meine Datei öffnen. Eigentlich eine sehr schöne und einfache Idee. Was Arne Blankerts nun hiermit erstellt, ist eine Art Protokoll für Sprachdateien. Dabei nennt er sein Protokoll “locale”. Alle Dateien, die er über “locale://pfad/zur/datei” includiert oder andersweitig öffnet, werden also durch diesen Wrapper gejagt. Ohne Frage eine nette Idee. Da wir gerade eine Lösung gesucht haben, um etwas ähnliches auf Basis von “template themes” zu bewerkstelligen hat sich also für mich schon gelohnt.
Leider stieg Arne nicht tiefer in die Materie ein, was bedeutet, dass ich mir ein wenig Material zusammensuchen werde und mich selbst mit dem Thema auseinandersetzen werde. Was aber euer Glück ist, denn ich werde bestimmt darüber berichten.
Jetzt muss ich natürlich nochmal meinem Blognamen treu bleiben und mich ein wenig über PHP aufregen. Streamwrapper austauschbar zu machen und neue hinzuzufügen ist schon eine sehr schöne objektorientierte Idee. Aber warum gibt es dann kein Interface, dass einen Streamwrapper darstellt? Meiner Meinung nach schreit das doch förmlich nach einen Interface. Man hat public Funktionen, die die Klasse auf jeden Fall mitbringen muss und die einer bestimmten Definition folgen müssen. Naja, mir fällt bei solchen Problemen nur die Standardantwort ein. Wir konnten das aus historischen Gründen nicht anders lösen. Nichtsdestotrotz sind Streamwrapper eine schöne Idee und jeder sollte mal einen geschrieben haben, um ein Gefühl für diese Helfer zu bekommen.
Vielleicht noch eine kleine Anmerkung für Arne: Code wird kommentiert und Variablen sollten einen aussagekräftigen Namen haben, zumindest wenn es der Code ist, den man auf einer Konferenz vorstellt!