Darum PHP!
Was Pascal kann schreiben, kann Dennis doch besser. Und das viel besser. Denn PHP ist besser. Auf jeden Fall besser als die Schlange Python. Na gut in einigen Sachen besser als Python. Deshalb mein „Darum PHP!“.
Diese pompöse Einleitung zeigt wie überzeugt ich von PHP bin. Denn meine Sprache mit dem Elefanten ist einfach gehalten, hat alles eingebaut (Man braucht für ein md5 keine import md5 sonstwas zu machen1) und läuft fast überall, außer auf einem 4-Takt Benziner, aber selbst das kommt noch. Der Hauptgrund für PHP ist doch, dass es innerhalb von Minuten läuft. Eine einfache index.php reicht und man hat ein Hallo Welt im Browser:
<?php
echo "Hallo Welt!"; // Ausgabe: Hallo Welt!
?>
Im Vergleich zu Python muss man erst Module laden, Apache einrichten, dann braucht es noch eine Einstellung für wsgi usw. Bei PHP ist dies alles nicht notwendig. Zwar ist Python sauberer in Sachen OOP, aber PHP hat dort etwas Einfaches geschaffen. OOP in PHP ist simple und schlicht. Und nicht jede neue Webtechnik von Java oder Ruby muss sofort übernommen werden. Sachen müssen reifen, so wie Namespaces. Sie sind jetzt nötig, deshalb kommen sie auch. In Version 5.3.
PHP ist für das Web ausgelegt und dort auch super. Wozu eine Eierlegende Wollmilchsau, wenn eine Sprache in einem Bereich top ist und nicht in 300 nur etwas top. PHP ist Web 2.0. Wieso haben sich Konzerne dafür entschieden? Zum Beispiel IBM, Yahoo, Flickr, (das neue) del.icio.us oder Last.fm. Nur um einige zu nennen.
Auch bei PHP gibt es Techniken wie MVC. Dies sind auch gut so. Hier dreht PHP keine eigene Wurst, wie Django zum Beispiel. Aber eins muss man Python lassen, das Logo ist toll, aber Old-School-PHP aus den 90er hat doch auch etwas.
P.S.: Wieso ich nur auf Python hacke? Naja, Ruby ist schon tot und Java zu mächtig. Da blieb nur die Schlange.
1 Bekommt PHP zwar auch in Version 5.3, aber man muss nichts Grundlegendes wie md5 oder sha1 importieren.

Julian
12. Mai 2008 um 11:23 Uhr
Toll, dein Hello World Beispiel. Nur wie sieht das mit Python als simples CGI Script aus?
Ja, das sind auch nur 3 Zeilen!
Ok, es mag ja schon stimmen, dass PHP für so Sachen wie Name aus einem GET Parameter und dann “Hallo,” aufzugeben, nur wer braucht so etwas in einer größeren Webanwendung?
Hast du denn schon mal so Dinge wie URL rewriten gemacht? Erstmal Apache dazu bringen, mod_rewrite zu laden, dann Die ganzen Rewrite Rules schreiben. Das ist schon toll. Eventuell noch in PHP dann etwas schreiben, dass die URLs mit diesen 500 Zeichen langen GET Parametern ausgibt, wenn es kein mod_rewrite gibt. Bei Django hast du eine ganz einfache URL Konfiguration.
Sobald es nämlich zur Datenbankinteraktion kommen soll, hast du mit PHP einiges zu tun, aber Django macht dir alles schön einfach. Auch die MysqlDB Erweiterung für Python ist da schon weiter, als PHP. Bei PHP muss man ja immer mysql_real_escape_string() machen, wobei bei Python solche Dinge automatisch geschehen.
Namespaces und PHP? In einem Satz? Geht das überhaupt? Also wenn dabei in 5.3 genau so ein Mist wie bei OOP rauskommt, dann wird es aber lustig.
Und wozu brauch ich alle md5, sha1, mysql, socket, ... Funktionen in meinem Root-Namespace, wenn ich sie doch garnicht benötige?
Aha, toll die Liste deiner Firmen, die PHP nutzen. Nur was ist mit Google? Ja, die nutzen Python. Aus gutem Grund.
Mal so eine Frage: Hast du dir mal nach einem halben Jahr ein größeres PHP Projekt angeschaut und noch irgendetwas verstanden?
Dennis (der olle FLabs Kollege)
12. Mai 2008 um 11:32 Uhr
Deine Argumente stimmen zwar, aber man darf nicht PHP und Django mit einander vergleichen. Ich hab hier mit dem Vergleich PHP und Python gearbeitet. Es gibt wie in Python auch in PHP Frameworks, die dir es einfacher machen, z.B. das URL-Routing. Jedes PHP-Framework kann das. Und auch jedes PHP-Framework hat ActiveRecord oder ähnliche Gesellen.
Und die Namespaces in PHP 5.3 sind zwar nicht so sauber wie z.B. in Python, aber für den PHP-Benutzer ideal ausgelegt. Es kommt immer auf den Nutzer an. Und für den gemeinen PHP-User sind die PHP Namespaces ideal, für dich als Python-User muss das nicht der Fall sein.
Natürlich gibt es auch Firmen die anderen Sprachen nutzen, wie zum Beispiel Google oder die NASA, die Python glücklich einsetzen. Aber man lobt doch die Feinde nicht, oder? ;)
> Und wozu brauch ich alle md5, sha1, mysql, socket, ... Funktionen in meinem Root-Namespace, wenn ich sie doch garnicht benötige?
Richtig. Stimme ich vollkommen zu. Aber dieser Artikel nimmt sich an bestimmen Stellen nicht ernst. ;)
> Bei PHP muss man ja immer mysql_real_escape_string() machen, wobei bei Python solche Dinge automatisch geschehen.
Vielleicht weißt du ja, dass man alle $_GET, $_POST, usw. mit magic_qoutes automatischen escapen lassen kann.
Ich arbeite seit 3 Jahren täglich mit PHP und habe schon viel programmiert. Mit einem tollen Framework und etwas Selbstdisziplin (zum Beispiel Code-Doku oder Pattern einsetzen) beim Coden und man verliert nie den Überblick.
Pascal (der olle FLabs Kollege)
12. Mai 2008 um 11:34 Uhr
(Mist, jetzt hatte ich gestern n Kommentar geschrieben, aber vergessen den abzuschicken. Und Julian hat mir netterweise fast alle meine Argumente schon benutzt, die Dennis kläglich versucht hat zu entkräften. Na, egal, hier ist er:)
Stimmt, PHP ist Einsteiger-freundlicher, aber dafür werden eben auch oft ganz viele (dumme) Fragen von ganz vielen (dummen) Einsteigern gestellt (hab ich selbst doch auch gemacht); das ist mir so bei Python noch nicht so aufgefallen.
Zu deiner Einfachheit: Bei PHP wird der normale, standardmäßige Namespace, also bis PHP 5.2 wohl “das große lokale Nichts”, vollgepumpt mit Sachen, die man alle 10 Jahre, äh Monate (Lokalzeit->Internetzeit!) mal braucht. MD5 z.B. hab ich genau einmal gebraucht, für Gravatars. Dafür muss es mir nicht meinen Namespace vollmüllen sondern darf sich gerne einfach irgendwo in einem Modul verstecken.
Außerdem ist Python sowohl für OOP als auch für Namespaces geschrieben, d.h. es besitzt die Funktionen einfach und funktioniert wunderbar damit. PHP musste sowas ja bisher immer erst ziemlich spät in der Entwicklung an den Arsch getackert bekommen.
Dennis (der olle FLabs Kollege)
12. Mai 2008 um 11:55 Uhr
Python ist aus OOP und Namespaces entstanden. Und PHP hat es wirklich an den “Arsch getackert” bekommen. Aber vor PHP 4 gab es für die PHP-User keinen Nutzen und keiner hat es gebraucht. Wie ich schon geschriben hab müssen Sachen reifen und nicht gleich sofort 1:1 übernommen werden.
Auch das bei PHP alles im Rootnamespace ist, stört keinen (nicht die Mehrheit) PHP-Benutzer. Aber es ist total sinnvoll. Wobei ich mich lustig gemacht habe über Pascal und Python, den er brauchte über 5 Minuten für ein für mich stupid md5.
Julian
12. Mai 2008 um 12:05 Uhr
> Vielleicht weißt du ja, dass man alle $_GET, $_POST, usw. mit magic_qoutes automatischen escapen lassen kann.
Omg hör mir mit magic_quotes auf. Da kommt sowieso nur Mist raus. Das war doch das, was sowieso auf jedem Server anders eingestellt ist und du dann sowieso wieder wo anders die Strings unescpaen musst und wenn es aus ist, hast du eine schöne SQL-Injection, oder?
Und ich habe auch mal mit CakePHP programmiert. Das ist schon deutlich besser als nur PHP, aber mir hat es trotzdem nicht gefallen. Danach kam dann zu Django und das hat mir super gefallen. Ich hab dann auch mal zwischenzeitlich Rails getestet, aber das imho nichts im Vergleich zu Django.
Wollen wir hier eigentlich Programmier-/Scriptsprachen oder Webframeworks vergleichen? Wenn es um Sprachen geht: Warum programmieren wir unsere Seiten nicht in Assembler? :D
Nochmal zu PHP und Namespaces: Wozu brauche im MySQL, PostgreSQL, Oracle, ... Bindings in meinem Root-Namespace? In Python importiere ich mir z.B. meine MySQL Bindings und hab dann Ruhe. Außerdem gibt es bei PHP (unnötigerweise) einige Funktionen die das gleiche machen. Wozu?
Dennis (der olle FLabs Kollege)
12. Mai 2008 um 12:13 Uhr
> Omg hör mir mit magic_quotes auf. Da kommt sowieso nur Mist raus. Das war doch das, was sowieso auf jedem Server anders eingestellt ist und du dann sowieso wieder wo anders die Strings unescpaen musst und wenn es aus ist, hast du eine schöne SQL-Injection, oder?
Wenn du schlau bist, machst du dir für die $_* Sachen einen Wrapper (hat jedes PHP-Framework!) und der macht den Rest.
> Wollen wir hier eigentlich Programmier-/Scriptsprachen oder Webframeworks vergleichen? Wenn es um Sprachen geht: Warum programmieren wir unsere Seiten nicht in Assembler? :D
Ich hab mich im Artikel mich auf den Vergleich Skriptsprache beschränkt, deshalb ärgert mich das, wenn man PHP und Frameworks vergleicht, das machen alle aus dem Python/Django und Rails-Lager, weil man dann besser da steht.
> Nochmal zu PHP und Namespaces: Wozu brauche im MySQL, PostgreSQL, Oracle, ... Bindings in meinem Root-Namespace? In Python importiere ich mir z.B. meine MySQL Bindings und hab dann Ruhe. Außerdem gibt es bei PHP (unnötigerweise) einige Funktionen die das gleiche machen. Wozu?
Natürlich ist das Schwachsinn den Root-Namespace vollzupumpen, aber die Benutzer von PHP haben sich das so gewünscht. Wobei es schon in die Richtung Mehre Namespaces geht (siehe PDO oder auch das alte PEAR).
Ich sehe PHP immer als rohen und ungeschliffen (Edel-)Stein der mit einem Framework für jeden Benutzergruppe geschliffen werden muss. Zwar umständlich. Aber so ist es doch auch mit Python und Django.
Julian
12. Mai 2008 um 12:26 Uhr
> Ich hab mich im Artikel mich auf den Vergleich Skriptsprache beschränkt, deshalb ärgert mich das, wenn man PHP und Frameworks vergleicht, das machen alle aus dem Python/Django und Rails-Lager, weil man dann besser da steht.
Dann such dir doch auch ein Framework aus ;) Also würdest du gerne PHP und Python als CGI vergleichen?
Per CGI funktioniert Python zwar auch, aber man muss sich erst ein paar Funktionen schreiben, um das zu machen, was ein Framework sonst auch ganz komfortabel bietet. Da Python in erster Linie nicht fürs Web ausgelegt ist, muss man die GET Parameter aus der entsprechenden Umgebungsvariable auslesen und so. Aber dafür gibt es das Modul CGI. PHP wurde halt für das Web programmiert und müllt dir dafür den Namespace mit $_POST, $_GET, $_SERVER usw. zu.
Pascal (der olle FLabs Kollege)
12. Mai 2008 um 12:29 Uhr
Ihr könnt mir sagen, was ihr wollt: Wenn ich mir PHP-Code angucke, dann sehe einen Haufen
$‘s,->‘s und ganz viele Klammern. Wenn ich mir Python Code angucke, dann sehe ich schöne Einrückungen, Docstrings zu jeder Funktion, ein paarimport‘s und größtenteils auch gutes funktionierendes OOP, das man schnell versteht. Das allein macht bei der tatsächlichen Programmierung für mich einen riesigen Unterschied, denn wenn man schon zur Ordnung gezwungen wird und zum größten Teil es nur einen klugen Weg ins Ziel gibt, dann hat man seinen Kopf für wichtigere Sachen — die Anwendung an sich — frei. Und deshalb programmiere ich in Python!Dennis (der olle FLabs Kollege)
12. Mai 2008 um 12:35 Uhr
@Julian: Da muss ich dir völlig zustimmen. PHP ist für das Web und damals (vorm Krieg :D) brauchte man bei der Web-Entwicklung kein OOP oder Namespaces. Bei Python ist das halt anders. Und dort sind Namespaces und OOP notwendig. Aber seit PHP4 geht PHP die Tiefen vom Professionellen Programmieren und da kam auch OOP dazu. Jetzt folgen halt die Namespaces.
@Pascal: Diese -> brauchst du ja nicht. Du kannst ja in PHP völlig Static programmieren (z.B. Dennis::neuerArtikel(“php”);) Klar ist der Python-Syntax sauber, aber für die PHP-User ist der PHP-Syntax gut.
> Dann such dir doch auch ein Framework aus ;) Also würdest du gerne PHP und Python als CGI vergleichen?
Ja, aber sollte mir nicht erlauben, weil ich Python als CGI nicht kenne. Ich suche mir kein Framework zum Vergleich, weil ich kaum welche im Detail kenne. Ich hab da mein eigenes und das kann ich gut. (Man darf es aber nicht mit Django vergleich, da Django ein Full-Stack-Framework ist und mein “PHP on Speed” ein Glue-Framework ist).
Julian
12. Mai 2008 um 12:41 Uhr
@Pascal: Stimmt, wobei Python Code sowieso so verständlich ist, dass man keine Docstrings braucht und ich sowieso immer zu faul bin, die zu schreiben :D
@Dennis: Ist für dich Wekrzeug (WSGI Toolkit, http://werkzeug.pocoo.org/) auch schon ein Framework? Denn das macht schonmal die ganze GET/POST Verarbeitung und ist WSGI Kompatibel (Wikipedia fragen). Damit kann man auch schon gescheite Webapps schreiben.
Wir sollten uns über Webframeworks streiten. Das macht mehr Spaß. Wer heute wirklich noch ohne Programmiert, ist meistens selber schuld.
Dennis (der olle FLabs Kollege)
12. Mai 2008 um 13:41 Uhr
Ich würde Werkzeug als minimal Framework bezeichnen. Es macht ja die Sache mit dem Anbinden an Apache (WSGI-Schnittstelle) einfacher.
Ich wollte ungern jetzt Frameworks nach Schwanzvergleichmanier vergleich, denn jedes Framework ist auf eine bestimme Zielgruppe und Konzept abgestimmt. Aber man könnte eine Matrix machen, wo man Django mit einigen PHP-Frameworks vergleicht. Und darauf dann eine Diskussion baut.
Pascal (der olle FLabs Kollege)
12. Mai 2008 um 13:50 Uhr
Als ich mich für ein Framework entscheiden musste, wollte ich auch erstmal 5 oder 6 nebeneinander stellen und empirisch vergleichen. Aber schlussendlich ist das totaler Schwachsinn!
Auf was es meiner Meinung nach wirklich bei einem Framework ankommt, ist neben dem logische Aufbau (dass man sich Funktionen erschließen kann), der freundlichen Doku und der aktiven Community ganz einfach das Feeling, das man beim programmieren bekommt.
Als ich mir z.B. CodeIgniter und CakepHP angeschaut habe, war mir nach ein paar Stunden schon klar, dass die beide nichts für mich sind. Sie sind zwar schön aufgebaut und so, aber das Feeling war einfach etwas aufgezwungen und nicht so “frei” wie bei Django, was ich direkt danach ausprobiert habe.
Deshalb sollten wir keine dumme Matrix machen, sondern lieber ein paar schöne Artikel schreiben, die dem Leser das Feeling vermitteln!
Dennis (der olle FLabs Kollege)
12. Mai 2008 um 13:53 Uhr
Stimmt Pascal, mir fällt auch auf, dass ich irgendwie bei meinem letzten Kommentar eine 180°-Wende gemacht habe. Vom Frameworks vergleichen ist doof zu machen wir doch eine Matrix. Es kommt wirklich auf das Feeling an. Ich nutze für ein kleines Projekt Django. Mir fehlt irgendwas und deshalb nutze ich Django nicht für alles, sondern mein Framework, was auf mich abgestimmt ist.
Basti
12. Mai 2008 um 15:22 Uhr
Boah seid ihr jetzt fertig mit euerm War? Ist ja schlimm ;)
Ich würde mal ganz pauschal behaupten, dass es völlig schnuppe ist welche Programmiersprache man benutzt. Das ist zum Größtenteils Geschmackssache des Programmierers bzw. Abhängig von der fertigen Anwendung wo, wie und warum sie später eingesetzt werden soll.
Es kommt immer auf die fertige Applikation an und wie man mit der Programmiersprache umgeht. Die Grundzüge sind doch eh überall gleich. Die selben Datenstrukturen, die selben Protokolle die selben Variablenoperationen etc.pp.
Ich persönlich halte Django als ein sehr bequemes und mächtiges Framework was in der Wildnis da draußen gut funktioniert, da es dafür auch geschrieben wird. Zudem gefällt mir die übersichtliche Syntax durch die Einrückungen. PHP ist dynamisch und sehr flexibel. Und das wird es auch immer bleiben.
Und wenn jemand ein Skript nach mehreren Monaten Pause nicht mehr versteht dann hat er wohl schlampig programmiert bzw. zu wenig Kommentare gesetzt :P
So far,
Basti
Martin
13. Mai 2008 um 16:51 Uhr
ein bisschen von Pascal nachformatiert
PHP:
Python:
Also ich würde mal sagen, als Sprache ist Python deutlich eleganter und, IMHO, besser. :)
Auch wenn die Einrichtung bei Python etwas länger dauert: Für größere Projekte finde ich diese wunderschöne Syntax, die einen wunderbar zu sauberem und gekapseltem Code animiert, deutlich effektiver.
Martin
13. Mai 2008 um 16:51 Uhr
Ähm ja, die Einrückung ist verloren gegangen, aber ich glaube, dass kann sich jeder denken, oder? ;)
Martin
13. Mai 2008 um 16:53 Uhr
Und in der vorvorletzten Zeile im PHP-Code bitte die eckigen Klammern um die Zahlen dazudenken. Danke. Wordpress spinnt irgendwie.
Pascal (der olle FLabs Kollege)
13. Mai 2008 um 18:41 Uhr
@Martin: Sehr schönes Beispiel wie schön Python sein kann!
Aber glaubst du wirklich, dass wir hier Wordpress benutzen?! Scroll mal zu Footer! :)
Martin
13. Mai 2008 um 20:19 Uhr
Huch :O
Ich dachte, es wäre Wordpress, da der Anfangs-PHP-Tag verloren ging, was mir stark nach strip_tags() aussah. :)
Max
08. Feb 2009 um 23:15 Uhr
also mal ganz realistisch…wer kurzfristig mit dem was er macht geld machen will, kommt mit python noch bis zum konzept und lokal is das dann auch ganz toll…das ding is dass kein mensch n vserver für n gescheites django hat :D zumindest keiner der einem von euch geld bezahlen würde :D