Clean Code mit PHP: Geht das?

Posted by in Allgemein

Der aufmerksame Leser wird festgestellt haben, dass ich nun schon seit längerem im zweiten Grad der Clean-Code-Developer Initiative verweile.

Der erste Grund ist der, dass ich erst seit 3 Wochen wieder Vollzeitprogrammierer bin. Vorher war ich mit Continuous Integration beschäftigt, das vielleicht auch noch einen Artikel wert ist.

Jetzt aber zurück zum eigentlichen Grund meines langen Verweilens im orangenen Grad: PHP. Im Moment integriere ich eine Reihe von Shortcodes in WordPress um mit Motopress anschließend Seiten zusammenklicken zu können. Dabei habe ich nicht nur oberflächlich mit PHP zu tun, sondern musste auch Einiges selbst entwickeln.

Die Problemstellung

Zum Beispiel legt Motopress beim Erstellen von Seiten für einen hinzugefügten Baustein eine Reihe von Hilfsinhalten an und benutzt dafür eine Syntax, die in etwa so aussieht:

Jetzt gibt es nur ein Problem: Die Suchfunktion von WordPress funktioniert so nicht mehr, da dieses Markup als normaler Text in der Datenbank steht und erst durch Javascript in seine endgültige Anzeigeform gebracht wird.

Sucht man jetzt ipsum bekommt man mitunter schon das Markup mit ausgespuckt in den Suchergebnissen. Die Idee war jetzt, das Unnötige zu entfernen.

Und damit fing die Odysee an

PHP-Manual: Ein großer Irrgarten

In WordPress gibt es einen Hook, mit dem man das Suchergebnis modifizieren kann. Bleibt also nur noch die Funktion zu schreiben, die den String bereinigt. Ein Blick in das PHP-Manual für String-Funktionen war gelinde gesagt schockierend, wenn man an Clean Code interessiert ist.

Da gibt es die schöne Funktion strpos die in einem String eine Zeichenkette sucht.

Soweit so gut. Kommen wir zu den Rückgabewerten. Da steht:

Gibt die Position als Integerwert zurück. Wurde needle nicht gefunden, gibt strpos() den boolean-Wert FALSE zurück.

Wie kann denn eine Funktion entweder einen boolean-Wert oder einen Integer zurück liefern. Statt FALSE hätte man auch einfach -1 zurückgeben können. So muss man nicht mit Beidem rechnen.

Sieht man weiter nach unter Sie auch bekommt man diese Liste (gekürzt):

  • strrpos() – Findet das letzte Vorkommen eines Zeichens innerhalb einer Zeichenkette
  • stripos() – Findet das erste Vorkommen eines Strings, unabhängig von Groß- und Kleinschreibung
  • strripos() – Findet das letzte Vorkommen der gesuchten Zeichenkette in einem String, unabhängig von Groß- und Kleinschreibung
  • strrchr() – Sucht das letzte Vorkommen eines Zeichens in einem String
  • stristr() – Wie strstr, aber unabhängig von Groß- bzw. Kleinschreibung
  • strstr() – Findet das erste Vorkommen eines Strings

Mal davon abgesehen, dass es anscheinend manche Funktionen doppelt mit unterschiedlichen Namen gibt, hätte man doch einfach die Hälfte der Funktionen streichen können, indem man einen Parameter für die Suchmodifikation eingeführt hätte.

strpos(haystack, needle, SEARCHLAST)

wäre doch eine gute Möglichkeit strrpos abzuschaffen. Schon alleine wegen der Möglichkeit strrpos mit strpos zu verwechseln/vertippen, würde ich sogar ein Array mit Parametern, die die Suche steuern akzeptieren.

Disziplin ist gefordert

Leider sieht PHP in keinem Bereich besser aus, was auch in diesem erhellendem Artikel in der Tiefe erörtert wird. Wie der Autor würde ich jedem davon abraten PHP für IRGENDWAS einzusetzen. Es ist für Nichts das richtige Werkzeug. Falls man aber doch gezwungen ist es zu benutzen, so sollte man äußerste Disziplin walten lassen. Nur weil es eine Funktion gibt, muss man sie nicht auch gleich benutzen!