Drei Monate Jobticket – ein Zwischenstand

Seit Juli kenne ich meine Freundin Marion, noch wohnt Sie in Speyer. Schon bald nachdem ich häufiger zu ihr gefahren sind, habe ich gemerkt: Das geht ins Geld, alleine für den Sprit. Eigentlich hatte ich ja Bahnfahren für mich abgehakt – bis dahin war es zu umständlich und zu teuer. Aber angesichts der veränderten Situation habe ich mich nochmal mit den Angeboten auseinander gesetzt. Und siehe da: Mit dem Jobticket viermal nach Speyer und zurück gefahren und schon bin ich im Plus.

Das Jobticket kostet aktuell etwas mehr als 35 EUR, weil auch mein Arbeitgeber einen Anteil bezahlt. Von daher war es dann keine Frage der Kosten mehr, Viel interessanter war der Komfort-Faktor: Wie flott komme ich von A nach B? Mit dem Auto habe ich mal nachgeschaut: Ca. 40-50 Minuten brauche ich von Haustüre zu Haustüre bzw. von Haustür bis ins Geschäft. Mit der Bahn und Bus dauert der Spaß ca. 60 Minuten, tendentiell etwas mehr.

Positiv überrascht hat mich die Qualität der Verbindung – mit 1-2x Umsteigen komme ich direkt bis vors Werkstor bzw. zu mir nach Hause. Für die Strecke von daheim bis zur Arbeit taugt die Verbindung auch weiterhin nicht, da bin ich mit dem Rad oder sogar zu Fuß schneller.

Kritisch ist die Vertaktung der einzelnen Strecken. Der S-Bahn-Haltepuntk an der SAP-Arena ist zwar ganz gut angebunden, aber nicht wirklich ein Highlight. Besonders ärgerlich ist der Bus-Takt des 50er Buses – nur alle 20 Minuten – besser als nichts, aber besonders ärgerlich einfach wenn man ihn gerade verpasst, weil die S-Bahn mal wieder einige Minuten Verspätung eingefahren hat.

Mit der Umstellung des Fahrplans im Dezember ist die Verbindung noch etwas ungünstiger geworden – nur noch alle Stunde mit etwas verlängerter Wartezeit klappt die Vertaktung an der SAP-Arena. Die S3 hält dort nämlich nicht mehr, oder zumindest nicht zu den Zeiten an denen ich dort durchkomme. Alternative lautet am Hauptbahnhof umsteigen, aber die Zeit ist verdammt knapp wenn man von Gleis 9 bis auf den Vorplatz kommen will – tägliches Spurttraining inklusive. Die nächste Bahn dort kommt dann aber auch schon 10 Minuten später. Die Busverbindung kann man dann allerdings auch in den Wind schreiben.

Was sind die praktischen Erfahrungswerte: Insgesamt ist das Reisen deutlich entspannter als sich jeden Morgen mit dem Auto nach Mannheim zu quälen. Nachteilig ist sicherlich die etwas längere Fahrzeit und die verminderte Flexibilität – pünktlich muss man schon sein, sonst hat man das Nachsehen. Dafür hat man aber auch während der Fahrt in der Regel die Chance sich um diverse Kleinigkeiten zu kümmern. Dank Laptop und Smartphone kann ich in der Bahn einigen Schriftkram wie e-mails oder Protokolle zu Vereinssitzungen recht gut machen.

Ein praktisches Hilfsmittel für jeden ÖPNV-Nutzer ist ein Roller bzw. Kickboard. Gefunden habe ich das meiner Schwester, es lag bislang ungenutzt auf dem Speicher bei meinen Eltern. Die ersten Versuche resultierten in etwas Muskelkater (ganz andere Muskulatur als beim Laufen), einigen kleinen blauen Flecken von unerwarteten Stopps an Randsteinen, Kuhlen und Co. Aber mit der Zeit lernt man mit dem Ding richtig umzugehen. Egal wie blöd das aussieht, das Gerät ist einfach praktisch. Besonders gut eignet es sich nach meiner Erfahrung für Distanzen bis ca. 1km. Das ist ausreichend um an den Bahnhof in Speyer zu gelangen (Bus wäre deutlich länger), oder auch die letzte Meile von der Haltestelle bis in die Firma zu überbrücken, wenn man nicht auf den Bus warten will. In der Regel bin ich so deutlich schneller.

Fazit: Anfänglich war ich ja wirklich skeptisch, aber mittlerweile muss ich sagen: Das Jobticket lohnt sich auf alle Fälle. Ich werde es auch behalten, wenn ich nicht mehr so häufig nach Speyer muss, weil wir unsere Haushalte zusammengelegt haben. Aber alleine der Komfort Abends in die Stadt und wieder nach Hause zu kommen, ohne ständig nach einem Parkplatz suchen zu müssen, das ist einfach nicht zu toppen. Auch für Ausflüge am Wochenende ist das Ticket super praktisch – dank Mitnahme-Regelung ist es sehr einfach möglich in den Odenwald oder auch in Pfalz zu fahren. Je nach Region kann man dann auch einen “Pälzer Weinschorle” oder “Äppel-Woi” trinken ohne das man groß daran denken muss auch wieder heim zu fahren.

Ich kann es jedem bisher nur empfehlen. Mal sehen wie es sich weiter entwickelt, wenn ich umziehe. Die ÖPNV-Anbindung wird bei der Auswahl der Wohnung auf alle Fälle eine Rolle spielen.

RLT Ultra-Marthon – von wegen Rodgau “Monotones”

Das neue Jahr ist gestartet – das Training läuft und läuft (im wahrsten Sinne des Wortes) – nur die Wettkämpfe lassen noch auf sich warten. Eigentlich ist es ja auch noch etwas arg kühl für einen Wettkampf und nicht die klassische Zeit – wer sich zu Jahresbeginn einen guten Vorsatz genommen hat, der ist jetzt noch nicht so weit einen größeren Wettkampf durchzuziehen. Aber wer schon im Training ist und “nur” über Weihnachten etwas “aktive Regeneration mit verstärkter Kalorienaufnahme” gemacht hat, der lauert ja schon förmlich auf die ersten Chancen.

Bisher habe ich meine Saison frühestens im Februar in Groß-Gerau über 10km gestartet. Letztes Jahr hat mich eine ordentliche Grippe davon abgehalten in Rodgau gleich zu Jahresbeginn einen Testlauf für Biel zu absolvieren – ob das damals schon ein Vorhinweis auf den Einsatz an der Elbe war? – Egal, schon vor Weihnachten haben wir das in der Laufgruppe in den Kalender eingetragen. Mit einem Ziel trainiert es sich ja bekanntlich leichter. Rodgau ist für mich der erste Ultra des Jahres in der näheren Umgebung – etwas mehr als 100km mit dem Auto – das ist definitiv machbar.

Aus der Anmeldung wusste ich schon: Es sind etwas mehr als 1000 Leute angemeldet für diesen Ultra-Lauf entsprechend voll ist es auf den Parkplätzen aber wir finden doch noch einen Platz, gut dass wir als Fahrgemeinschaft angerückt sind. Auf den Support durch meine Freundin Marion muss ich dieses Mal verzichten, sie hat selbst eine Vereinsveranstaltung im Laufe des Tages – aber bei den Temperaturen an der Strecke stehen, ist auch nicht jedermanns Sache (auch wenn die Organisatoren die Supportler gegen eine Spende an der Versorgung teilhaben lassen – sehr löblich).

Vor dem Lauf noch eine kurze Abstimmung – die Gruppe um Peter Müller (auch bekannt als P.U.L.T. = Peters Ultra LaufTreff) ist bunt gemischt und so teilen wir uns auf – einige wollen nur ankommen oder kündigen gleich zu Beginn an, nur 40km oder ggf. einen Marathon mitzumachen – die große andere Gruppe peilt anfänglich mal die 5:45 min/km an. Eine Besonderheit des Laufs im Rodgau: Es ist ein Rundenlauf – jede Runde 5km, 10 Runden sind zu absolvieren. Jeder der nach mehr als 15km aussteigt wird aber in der entsprechenden Streckenlänge separat gewertet – auch nicht verkehrt, falls es nur ein Testlauf ist, kann man wenn es hart auf hart kommt elegant aussteigen. Vor dem Start gibt es eine kleine Aufwärm-Übung: Vom Parkplatz bis an den Start geht es erst einmal 1km durch den Wald – schon der Kilometer kommt mir etwas langezogen vor, ich hoffe innerlich, dass die anderen offiziell vermessen sind.

Pünktlich um 10:00h ist Start und die Masse setzt sich in Bewegung. Noch ist das Feld dicht gedrängt und beim Überqueren der Matte staut es ein wenig, aber nach und nach kommt alles ins Laufen. Ich orientiere mich – Jürgen, Frank und Harald sind alle dicht bei mir und wir geben ein wenig Gas. Frank ist noch etwas kalt und daher schlagen wir ein geringfügig schnelleres Tempo an, damit ihm nicht kalt wird. Auf den ersten Kilometern sind wir mir 5:30min/km unterwegs. Aber es läuft sich ja so locker, also lassen wir es laufen. Nach 800m kommt die Versorgungstation und es geht ins freie Feld – es ist mit Temperaturen um den Gefrierpunkt recht frisch und ein leichter Wind kühlt zusätzlich. Kurz nachdem es wieder in den Wald geht, passieren wir bereits Kilometer 2 – na das ging ja fix. Bei Kilometer 2,5 steht ein weiteres Zelt mit Musik für die Läufer, an der Kreuzung geht es auf eine kurze Pendelstrecke damit pro Runde auch wirklich 5km zusammen kommen. Kurz nach der Pendelstrecke steht auch schon das Kilometerschild 3km – superfix und lockerleicht bisher. Natürlich immer noch deutlich zu schnell – mittlerweile sind wir bei nur noch etwas mehr 5min/km und ich mahne ganz vorsichtig, doch etwas langsamer zu machen. Aber warum nicht laufen wenn es gut läuft? Es geht im Zick-Zack durch eine paar Wiesen bevor die Strecke wieder im Wald verschwindet. Im Gegensatz zu letztem Jahr, als überall Eis und Schnee lagen haben wir dieses Jahr jede Menge Matsch, der natürlich durch die Läufermassen auch noch schön breit getreten wird. Bei Kilometer 4 geht es eine kleine Steigung hoch – nicht wirklich viel, laut Höhenmesser sind es pro Runde nur um die 10hm. Aber ich ahne schon, dass dieser Buckel am Ende sich um so höher anfühlen wird. Noch ein paar Schlenker und schon geht es auf die Start-Ziel-Gerade. Die gut sichtbare rote LED-Uhr spitzt schon aus der Ferne durch das Geäst.

In Runde zwei greife ich gleich mal bei der Ernährung zu – Banane und Keks, das halbwegs gemütlich gekaut und schon ist man wieder bei Kilometer zwei – aus der Entfernung schallt und da schon “Cotton Eye Joe” entgegen. Wieder nix von wegen “Rodgau Monotones” mit “Die Hesse komme” – aber es sind ja noch einige Runden bis zum Ziel. Ich laufe ein gutes Stück mit anderen Läufern – Frank hat sich vorne abgesetzt, Jürgen sehe ich jedesmal auf der Pendelstrecke, Harald ist auch irgendwo unterwegs.

Runde drei hänge ich mich an ein paar nette Läufer, einer aus Heilbronn – Tempo weiterhin deutlich unter 5:30 min/km.Aber noch ist es recht gut zu laufen, auch wenn die Strecke langsam doch etwas monoton wird. Runde vier gibt es wieder Kekse und Banane wie jede Runde, da ich selbst etwas zu trinken am Gürtel habe, entfällt der Stopp am Getränkestand. Die kleine Gruppe zerfällt, ich ziehe an der Verpflegung schneller wieder von dannen. Bei Kilometer 4 haben sie mich dann wieder eingeholt. Irgendwo entlang der Strecke sammle ich auch Frank wieder ein. Jürgen hält weiter Abstand, auch wenn der scheinbar kürzer wird.

Runde vier läuft weiterhin richtig gut für mich, ich werde immer noch schneller obwohl ich eigentlich langsamer machen wollte. Naja kann man nichts machen. Langsam wird die Strecke aber tatsächlich langweilig bzw. monoton. Immerhin rolle ich langsam das Feld von hinten auf, es sind also immer Läufer vorhanden an die man sich langsam “ransaugen” kann. Das motiviert natürlich ungemein. Auch die fünfte Runde vergeht one irgendwelche nennenswerten Beschwerden oder Veränderungen – ich futtere weiterhin jede Runde Banane und Kekse, dazu Apfelsaftschorle. Aber die Motivation lässt langsam nach. Ich versuche mich damit aufzuheitern, dass die Hälfte ja schon geschafft ist und 25km die noch vor mir liegen ja nur ein wenig mehr als eine Trainingseinheit sind.

Auf Runde sechs ist es deutlich zu merken: Jürgen holt langsam aber sicher auf – ich weiß nur nicht ob er schneller oder ich langsamer werde. Aber es sind ja nur noch 20km als ich durchs Ziel laufe – nicht mal mehr ein Halbmarathon, ja fast noch nicht mal eine richtige Trainingseinheit – aufgeben: Jetzt nicht mehr. An der Versorgung ist es etwas voll in dieser Runde – ich erwische gerade keine Kekse sondern nur Banane. Aber das sollte ja eigentlich auch reichen – weit ist es ja nicht mehr. Was mir auffällt: Der Wind hat ein wenig aufgefrischt, auf den Passagen durch die Felder wird es merklich frisch in meiner dünnen Bekleidung. Ich laufe mittlerweile meinen ganz eigenen Pace, irgendwie findet sich keiner in meiner Geschwindigkeitsklasse. Aber immer noch jede Menge Leute. Auch die erste Frau hat zwischenzeitlich überholt, aber es ist ja auch ein Testlauf für mich. Die Platzierung ist mir im Prinzip egal, das Wichtigste ist immer noch das Ankommen.

Immerhin: Runde sechs ist gemeistert, weiter geht es mit Runde 7. Immerhin schon 35km gelaufen – die Marathon-Marke kann man schon fast sehen (genauer gesagt kommt man jede Runde an der entsprechenden Markierung vorbei, aber sie zählt natürlich nur in Runde 9). Ich motiviere mich – bis ins Ziel komme ich auf alle Fälle nochmal, und wegen drei läppischer 5km-Runden werde ich jetzt nicht mehr aufgeben, auch wenn es mittlerweile härter wird, aber noch fühle ich mich ganz passabel.

Runde acht beginnt ganz gut, aber ich merke, dass ich langsam Federn lassen muss – ich habe etwas mehr Durst und bediene mich an meiner Flasche – nur um dann festzustellen, dass die fast leer ist. Das ist natürlich gerade etwas blöd, aber weit ist die nächste Versorgung ja eigentlich nicht. Trotzdem: ich werde langsamer und Jürgen zieht an mir vorbei. An der Verpflegung tanke ich ein wenig, aber ich bin so fertig, dass es gar nicht recht flutschen will. Immerhin bin ich ja nun in der Marathonrunde – noch ein klein wenig mehr als 9km liegen vor – mir. Also Kopf hoch und durchbeißen. So zumindest die Theorie. Die geht aber nur bis zur nach der Marathon-Marke auf – bei Kilometer 43 streikt mein Körper endgültig und ich muss frustriert gehen. Immerhin finde ich einen anderen Läufer dem es ähnlich geht – er hat sogar noch eine Runde mehr vor mir. Gegenseitig motivieren wir uns und schieben uns so langsam aber sicher in Richtung Verpflegung – eine Runde ist es noch, die will ich dann auch noch machen, der Ehre halber wenigstens ankommen. Was ich bisher vergessen hatte beim Esssen: Elektrolyte, insbesondere Salz. Das merke ich nun um so mehr, bei jedem Versuch auch nur ganz vorsichtig wieder anzujoggen zucken die Waden und machen mir klar: Mach weiter und es krampft richtig.

An der Versorgung mache ich dann Nägel mit Köpfen: Jede Menge Wasser, warmer Instant-Tee, Iso-Getränk, Cola – dazu Bananen und Salz-Cracker. Danach der vorsichtige Versuch wieder anzulaufen, es sind ja nur noch 4,2km – also ein Zehntel Marathon. Nach anfänglichen Protesten aus der Wadengegend läuft es dann docch wieder – wenn auch nicht mehr mit ganz so hohem Tempo. Ich beginne mich auf den Zieleinlauf vorzubereiten. Nochmal die Pendelstrecke, danach sind es nur noch 2km. Letzte abgelesene Zwischenzeit war irgendetwas um 4:10h – im Kopf überschlage ich was angesichts des Gehens bis an die Versorgung noch drin sein könnte – die 4:30h sind definitiv nicht zu erreichen – die 4:40h wären es wohl mit einem Sprint, was aber nicht mehr geht – aber 4:45 sollten machbar sein. Ganz vorsichtig steigere ich wieder das Tempo. Rein in den Wald und die einzige kleine Steigung hoch – noch 1km, ich mahne mich dazu nicht zu sprinten sondern die Kräfte einzuteilen. Endlich kommt die Zieluhr in Sicht – und passend zu meiner wieder hergestellten Form läuft gerade “All right now” von Free … beim Spurt über die Ziellinie muss ich dann doch mitgrölen – laut und schräg, denn nun ist ja wirklich alles in Ordnung, ich bin im Ziel, ich hab es geschafft.

Die Verpflegung im Ziel ist richtig gut, auch wenn ich wenig Hunger habe – Malzbier, Weizenbier alkoholfrei, Limonade, Tee – was das Läuferherz begehrt. Ich hole meine Tasche und ziehe mir ob der Kälte gleich mal ein frisches langes Trikot und eine trockene Jacke über, die Wettkampfklamotten sind absolut durchnässt. Kurz nach mir trifft Frank ein – auch er hat es geschafft und war im Endeffekt nur wesentlich langsamer. Ich ärgere mich ein wenig über den “Anfänger-Fehler” mit zu wenig Essen und Trinken, irgendwie muss ich mir wohl doch mal einen Ernährungsplan für solche Aktionen zusammenstellen. Harald lässt noch auf sich warten, aber mir wird es zusehens kalt, trotz der Folienjacke die es im Ziel gibt (sehr praktisch!). Also machen wir uns langsam auf den Weg zur Halle und zum Auto. Ich habe für Haralds Fahrzeug natürlich keinen Schlüssel und da drin liegt mein Handy sowie das Duschzeug. Immerhin mein Notfall-Set aus Handtuch und Duschgelproben habe ich bei mir. Da Harald uns auch am Auto noch nicht eingeholt hat, hinterlasse ich meine Startnummer mit einer Nachricht und begebe mich zum Duschen. Die gibts leider auch nur in Ultra-Form: entweder ultrakalt oder ultraheiß in homäopathischen Dosen. Es reicht fürs notwendigste. Zudem treffe ich Jürgen wieder. Am Auto ist dann auch Harald eingetroffen – ich ziehe endlich wieder richtig warme Klamotten an bevor es heimgeht. Was eine Wohltat.

Insgesamt muss ich sagen: Ein interessanter, gut organisierter und gut besuchter Lauf. Leider mit der Zeit wegen der Runden dann doch auch “Monoton” wie die passende Band. Aber ich halte mir den definitiv einmal im Hinterkopf, immerhin ist es eine der ersten Veranstaltungen im Jahr, bei der man sehen kann was von der Ultraform aus dem Vorjahr noch übrig ist.

Modularer Querbaukasten in PHP: Traits

Objektorientierte Entwicklung ist mittlerweile der Standard wenn es um Geschäftslogiken geht. Für verschiedene weitere Anwendungszwecke gibt es auch immer noch gute Funktionale Programmiersprachen. Jede Herangehensweise hat ihre Vor- und Nachteile.

Wie immer sind Programmierer komische Wesen und würden an einigen Stellen gerne das Beste aus beiden Welten haben, auch wenn diese sich eigentlich gegenseitig ausschließen.

Aktuell hatte ich mal wieder einen solchen Fall: Es gibt eine “fertige” PHP-Bibliothek zum Erzeugen von PDF-Dokumenten (diese eigenen sich in der Regel besser zum Ausdrucken als HTML-Seiten) – etabliert hat sich hier FPDF bzw. dessen Fork TCPDF. TCPDF ist die aktuellere und modernere Fassung, sie unterstützt unter anderem die Verwendung von UTF-8-Zeichensätzen. Daher musste ich mich auch “mal wieder” mit schon lange gepflegten und eigentlich abgeschlossenen PDF-Routinen beschäftigen: FPDF kann mit UTF8 nicht richtig umgehen, somit sehen die erzeugten PDFs aus wie Kraut und Rüben sobald Umlaute oder Sonderzeichen im Spiel sind.

Beim Umstellen gibt es ein paar Feinheiten, aber nichts was einen wirklich davon abhält die Umstellung halbwegs zügig durchzuführen. Die meisten Probleme erkennt man einmal und kann sie dann in den Folgedateien direkt korrigieren.

In diesem Zusammenhang habe ich mich mal wieder etwas geärgert: Viele unserer Dokumente enthalten Tabellen. Soweit so langweilig. Aus Mangel an Alternativen haben wir häufig den Code einfach von der einen eigenen Klasse in die nächste mit kopiert. Das Ergebnis ist altbekannt. Wenn man einen Fehler beseitigen will, muss man alle Kopien mit durcharbeiten. Effizient ist das nicht gerade.

Eine mögliche Option ist es eine eigene Klasse dazwischen zu setzen, die solche Funktionen realisiert. Aber was ist mit den Dokumenten wo man dann gar keine Tabelle braucht – da hat man Pech gehabt? Fazit das geht, aber richtig schön finde ich das auch nicht. Mehrfach-Vererbung kennt PHP nicht – aus gutem Grund (Diamond-Problem). Für meinen Fall hätte ich mir etwas gewünscht wie eine Art Plugin oder von mir aus auch eine Art “include” das entsprechende Funktionen einbindet wenn sie benötigt werden. Vergleichbar mit dem was ein Präprozessort für C erreichen kann: Macro-mäßig das einfügen was gerade gebraucht wird – bei compilierten Sprachen eine sehr feine Sache, bei Skripten leider kein gangbarer Weg.

Was braucht man eigentlich genau? bzw. was wünsche ich mir? – Das waren meine Fragen. Damit man eine Tabelle einfach einbauen kann braucht man Zugriff auf einige Klassenvariablen – man könnte sich ggf. behelfen, eine Referenz an eine Tabellenklasse zu übergeben und dort den notwendigen Code zu schreiben. Aber eine Tabelle ist ja auch nur wieder eine Sammlung von einfacheren PDF-Elementen – würde also auch wieder aus der TCPPDF-Klasse erben müssen, davon den Code in die andere Klasse zu übergeben mal ganz abgesehen. Eine Art “Nachbau” des Präprozessors wäre es wenn man hergehen könnte und an der benötigten Stelle in der Klasse einfach per include die Funktionen einbaut die man braucht. Das geht natürlich so nicht, auch weil es im Tabellencode ja durchaus sinnvoll ist, diesen strukturiert zu halten und keinen Spaghetti-Code zu erzeugen, den keiner mehr durchschaut. Auch die Nutzung von Klassenvariablen innerhalb der Tabelle wäre doch praktisch. Kurzum: ein simples Include kann das nicht leisten und sollte es auch nie.

Nun ist es ja aber bei weitem kein super exotisches Problem, mit dem wir hier konfrontiert sind: Modulbauweise mit Blackboxes die nur definierte Schnittstellen haben ist ja auch in anderen Bereichen üblich: Keiner entwickelt heute mehr für jedes Auto Standard-Komponenten vollständig neu – vielmehr werden Grundelemente mit einen neuen Aufsatz versehen oder neu miteinander kombiniert. PHP löst das Dilemma mit sogenannten Traits – ich vergleiche das gerne mit Matrix-Vererbung – um ein Gesamtpaket zu erhalten markiert man einfach die Zusatzfunktionen die das Ergebnis haben soll. Klingt kompliziert – ist es aber nicht.

Einen Trait programmiert man fast wie eine ganz normale Klasse – abgesehen, davon dass sie keinen eigenen Konstruktor enthält, gibt es alles was man sonst auch kennt: Funktionen, Zugriffsbeschränkungen (public,private,protected) und Klassenvariablen. Kurzum man kann alles was man immer wieder braucht damit sauber realisieren – in meinem Fall, habe ich alles was ich für eine Tabelle benötige im Trait verpackt. Man hat sogar Zugriff auf die Methoden und Variablen der Klasse in der man den Trait am Ende einsetzen will – hier ist die Unterstützung der Entwicklungsumgebung natürlich nicht so gut wie in einer vererbten Klasse, denn der Trait kann ja in jeder beliebigen Klasse verwendet werden – von daher etwas mehr Denkarbeit. Ich habe vieles direkt aus der bisherigen Realisierung übernehmen können, das macht es etwas leichter.

Was man noch beachten muss: Gleichnamige Funktionen in der übernehmenden Klasse “überdecken” bzw. überschreiben die Funktionen des Traits (vergleichbar mit dem was man aus der Vererbung kennt: Es wird immer die “nächstliegende” Funktion genommen, es sei denn man gibt den Namespace bzw. die Elternklasse mit an (parrent::) . Für mich hat es sich bewährt im Trait die Funktionen als solche entsprechend zu bennen – sie bekommen alle den Prefix “pdf_table_trait_” – die Wahrscheinlichkeit, dass man somit ungeplant etwas überschreibt ist vergleichsweise gering. Die Programmiersprache nimmt einem eben nicht alles ab und etwas Coding-Disziplin hat noch keinem Entwickler geschadet.

Insgesamt habe ich nun mit dem Trait das was ich gesucht habe: Einen Code-Block, den ich separat warten kann – wenn ich einen Fehler in der Tabellenerzeugung beseitige, dann muss ich das nur noch an einer Stelle tun, nicht mehr in jedem Dokument. Zudem habe ich es so realisiert, dass ich den Code sogar innerhalb einer Klasse mehrfach aufrufen kann um verschiedene Tabellen zu zeichnen (das hatte ich vorher mit etwas Verrenkungen unsauber gelöst). Man sollte natürlich jetzt nicht alles und jedes zwingend in einen Trait auslagern, nur weil es geht – mit Maß und Ziel das richitige Werkzeug an der richtigen Stelle ansetzen. Traits gehören dabei eindeutig in die Kiste mit der Aufschrift “Spezialwerkzeuge” – man braucht sie nicht all zu häufig, aber wenn man weiß dass es sie gibt und wie man sie richtig einsetzt, geht vieles sehr elegant zu lösen.