PHP mögen viele nicht. Ich auch nicht. Die Argumente, die oftmals genannt werden, kann ich aber überhaupt nicht nachvollziehen. PHP wird mit Perl verglichen. PHP wird mit python verglichen. Natürlich gibt es grundlegende Unterschiede, aber man darf eine Programmiersprache nicht dafür verurteilen, dass sie ein anderes Konzept verfolgt. Ich erkläre einmal Argumente, mit denen ich nicht einverstanden bin, und ebenso meine Argumente gegen PHP:
- PHP hat keine Namespaces. Natürlich sind sie bei riesigen Projekten vorteilhaft, wenn man jedoch die Namen für Funktionen, Module und Variablen gut wählt, dann halte ich sie nicht für notwendig. Ich habe sie zumindest noch nie unbedingt gebraucht. Sehr wichtig halte ich dafür den Geltungsbereich für Variablen in Funktionen (ach, wie schön das klingt
). Der muss dafür auf jeden Fall zur Verfügung stehen und das ist soweit ich weiß bei allen turing-vollständigen Programmiersprachen implementiert. - PHP hat kein Modulkonzept. In der Tat. Mit include() kann man sämtliche PHP-Dateien wie Module importieren und wenn der Programmierer eines Frameworks kein Noob ist, kommt es auch zu keinen Komplikationen. Viele wissen auch gar nicht, dass es für alles mögliche implementierte Funktionen gibt. BBCode, GnuPG, XML-Zeug, …
- PHP verwendet sogenannte assoziative Arrays. Wie bereits oben erwähnt, darf man eine Programmiersprache nicht dafür verurteilen, dass sie ein anderes Konzept verfolgt. Das Konzept von PHP: Alles sollte in einem Container Platz haben. Es gibt keine weiteren Unterscheidungen (vergleich Perl und python). Für gewisse Bereiche halte ich den dynamischen Umgang mit Datentypen (in Arrays) für sehr vorteilhaft. Der Kritikpunkt ist nur, dass Arrays unsauber implementiert sind.
- Stichwort Datentypen. PHP ist sehr großzügig mit Datentypen. (int)”12Foobar” ist 12 und (int)$_GET['sql_injection'] ist 0. Auch hier finde ich Vorteile, allerdings ist es für seine schlechte Implementierung zu verurteilen. Fehler wie diese führen dazu, dass Durchschnitts-Programmierer unsauberen Quelltext schreiben.
- $var; das Dollarzeichen kennzeichnet die Variable. Halte ich für sehr praktisch, wobei es den Quelltext natürlich mit Dollarzeichen überhäuft. Aber in python oder VB gibt es dann keine Doppelreferenzierung wie $$var_von_var. Bei der Analyse (die zB für einen Online-Syntaxhighlighter gemacht werden muss) ist die Variable leichter zu erkennen. Außerdem gibt es keine Komplikationen zwischen Funktionsnamen und Variablen
- PHP hat keine UTF-8-Unterstützung. Während PHP 6 Unicode unterstützen soll, machen dies schon lange die meisten anderen Sprachen (von python kann ich es bestätigen). Wie lange es jedoch dauert, bis alle PHP6 verwenden, möchte ich gar nicht wissen, nachdem manche Programmierer noch PHP4 unterstützen. Dann denkt man sich, man kann doch sicher irgendwie selbst was programmieren, damit man mysql_set_charset auch in alten Versionen verfügbar machen kann. Falsch… es stehen gar keine Basisfunktionen für den UTF-8-Support zur Verfügung.
- PHP ist spezialisiert. python hat seinen “interaktiven Modus” auf der Kommandozeile und Perl kann man als Skript laufen lassen. Der “interaktive Modus” für PHP nennt sich SAPI, allerdings bietet er nicht die idente Funktionalität. Besonders bei zeitaufwändigen Arbeiten hat PHP hier Probleme. Über die max_execution_time lässt sich die Ausgabezeit regeln, aber für den Browser ist das auch nicht angenehm. Gerade in dem Moment läuft neben mir ein python-Skript mit einer Laufzeit > 23000 Sekunden (bisher
). In PHP würde ich sowas nicht machen. Aber ok… PHP ist spezialisiert auf Webanwendungen und dafür kann man es ja nicht verurteilen?! - Die PHP-Dokumentation ist minimalistisch. Kann ich nicht bestätigen. Von den Modulen (die andere als Zend entwickeln) und Kommentaren (der User) abgesehen. Natürlich kann PHP keine Veranwortung über die Korrektheit von Aussagen anderer über PHP übernehmen. Für relativ neue Funktionen muss man manchmal warten bis eine Doku vorhanden ist. Google macht sonst den Rest.
- Der Umgang mit in-place-Funktionen. sort() ist das klassische Beispiel aus jeder Programmiersprache, die in-place arbeitet. Sie verändert die Eingabeliste direkt und gibt keine Rückgabeparameter zurück. Während es in python viele dieser Sorte gibt, so sind es in PHP nur ein paar in-place-Funktionen. Die passen eigentlich nicht in das restliche Konzept. Aber wenn es sauber dokumentiert ist, halte ich es für akzeptabel
- Durch die Modularität der php.ini ist es schwer ein Framework für alle Versionen zu schreiben. Wenn der PHP-Entwickler seine Berechtigungen sehr streng einstellt, dann läuft das Framework unter allen Konfigurationen. Für die alten $HTTP_POST_VARS gibt es Hack, die auch ich immer einbaue.
- PHP hat magic_quotes und register_globals. PHP gesteht sich diese Fehler ein und macht in der Dokumentation darauf aufmerksam (zB 1, 2)
- Funktionsnamen sind nicht einheitlich. Keine einheitlichen Richtlinien für underscores (zB urlencode und base64_encode). Verb oder Objekt? (zB create_function und var_dump). “2″ oder “to”? (zB strtoupper und bin2hex). Als Referenz sei “PHP has inconsistent function naming” genannt. python und Perl haben überall klare Richtlinien
- Datenbank-Unterstützung. … ist unter PHP wunderbar und für alle möglichen Datenbank stehen die Funktionen bereit. Auch persistente Verbindungen sind möglich. Ich gebe den Vorwürfen recht, dass viele nicht wissen flush-Funktionen umzugehen
Ich denke hier kommt man zu keinem Ergebnis. Wenn man es genau nimmt, kann man jeden Unterschied als Vor- sowieso Nachteil nennen. Das Einzige was wirklich nicht in Ordnung ist, wenn das Verhalten von Quelltext unvorherrsehbar ist (wenn die Erwartung auf Logik oder der Dokumentation basiert). Und hier hat PHP wirklich einige Defizite. Wie schon oft genug erwähnt, bin ich immer mehr mit python unterwegs, jedoch warten noch einige PHP-Skripte auf mich. Nichts destotrotz… ich glaube es ist alles reine Gewohnheitssache. Seit ich weiß, dass ein String (in einem Vergleich mit einem Integer) in einen Integer verwandelt wird, wird mir auch nicht mehr der Fehler passieren. Genauso haben ich schon alle Funktionsnamen intus. Jetzt wird man argumentieren “es soll nicht nur Gewohnheitssache sein, sondern für alle leicht erlernbar. Nicht nur fürjahrelang eingefleischte Geeks”. Das stimmt natürlich. Wenn wir von dem Standpunkt ausgehen, kann ich aber genauso gegen jede andere Programmiersprache argumentieren. PHP halte ich für Anfänger gut. Als ich diese Aussage in IRC tätigte, argumentierten zwar alle entgegen, aber mein Hauptargument ist, dass man sich keine Gedanken um Datentypen machen muss und große quelltextdesign-technische Freiheit hat. Der Umgang mit Parametern ist auch wesentlich leichter als in python. Natürlich kann ich trotzdem nicht PHP empfehlen. Schließlich bleibt man auf jeden erlernten Programmiersprache stecken. Und das soll nicht PHP sein…
Wer sich jetzt fragt, wieso ich den Post auch in “Philosophie” gegeben habe, darf sich mit der Frage befassen: Wann sind genug Argumente genannt, damit man “seine aktuelle” Programmiersprache wechselt und sich mit einer anderen befasst?
Recent Comments