Ich gebe zu: Ich mag PHP nicht. Es ist eine unstrukturiere Daddelsprache, mit der man zwar schnell vieles machen kann, aber nur weniges richtig strukturiert designen. Jeder halbwegs komplexe Code, der dann auch noch strukturiert und – wichtig – sicher sein soll, verliert sich in vielfachen Indirektionen von einem mehrdimensionalen Array zum nächsten. PHP ist was für Bastler und Tüftler, aber wer wart- und wiederverwertbaren Code schreiben will, der sollte sich lieber eine andere Sprache suchen.
Vor kurzem unterhielt ich mich mit einem Bekannten über einen gemeinsamen dritten Bekannten, mit dem wir beide dieselbe negative Erfahrung gemacht hatten: Unzuverlässig, nachlässiger Programmierstil, kaum wartbar. Wir beide hatten ihn schon mal jeweils im Laufe eines Projektes „verloren” und anschließend seinen Teil weggeworfen und neu geschrieben. War einfacher.
Was mir entgangen war: In einem Modul unseres System kreuchte der fünf Jahre alte Originalcode noch herum. Und natürlich ist genau dieser Teil Amok gelaufen, als ich jetzt eine Portierung von PHP 4 auf PHP 5 vorgenommen habe. Höhepunkt programmiertechnischer Meisterleistungen: Eine hierarchische Datenstruktur wird rekursiv geparst. „((a b)(c d))” wird also zu „Array([0]=>Array([0]=>"a" [1]=>"b") [1]=>Array([0]=>"c" [1]=>"d"))
”, wobei jedes Klammerpaar von einer neuen Instanz derselben Parserklasse auseinandergepflückt wird.
Dumm nur, wenn man statt neuer Instanzen immer denselben Parser nimmt, der zudem nur einen Satz interner Variablen hat. Dann geht die ganze Baumstruktur über den Jordan und das Parsingergebnis sieht so aus: „Array([0]=>"a" [1]=>"b" [2]=>Array([0]=>"a" [1]=>"b") [3]=>"c" [4]=>"d" [5]=>Array([0]=>"c" [1]=>"d"))
”. Urks. Zwei Stunden habe ich die PHP-Spaghetti umgebaut, bis der Code das machte, was er soll.
Was ich daran jetzt PHP ankreide? Ganz einfach: Das hätte nie funktionieren dürfen! Ich will lieber gar nicht wissen, welches programmiertechnische Kabinettstücken dazu geführt hat, dass diese völlig verhunzten Parserkonstrukte fünf Jahre klaglos unter PHP 4 gelaufen sind…