Seid mir nicht böse, ich will nicht rumtrollen aber ich versuche dem auf den Grund zu gehen wieso PHP so beliebt ist?
Ich selber habe Projekte schon in PHP durchführen müssen! Zum glück das letzte mal vor 3 Jahren, denn ich bin ehrlich nicht begeistert von der Sprache. Drum bitte falls jemand mit Kritik an PHP nicht umgehen kann, les diesen Beitrag nicht, denn er ist nicht gerade PHP-schmeichelnd.
Ich höhre oft: PHP ist leicht zu lernen.
Nun das sehe ich anders. Die erste Hürde die mann meistern muss ist eine Apache Installation aufzusetzen.
In anderen interpretierten Sprachen reicht es den Interpreter zu installieren und mann hat sogar eine interaktive Shell in der mann die Sprache ausprobieren kann.
Beispiel die Pythonshell.
Bei meiner Ubuntu Installation ist php als Apache Modul geladen, weshalb ich nirgends einen Shell aufrufbaren Interpreter finde (z.b) /usr/local/bin/php.
Ich werde also gezwungen, wenn ich PHP lernen will, direkt auf dem Webserver zu arbeiten.
In anderen Sprachen (beispiel Python oder Ruby) habe ich nicht nur einen Interpreter den ich einfach ansteuern kann.
sondern auch eine eine interaktive shell die mich sofort python Ausdrücke auswertet. Sprich es reicht ein aufruf von:
und mann kann sämmtliche Beispiele eines Buches / Tutoriums durchgehen.
Weiterer Grund:
Wer damit lernen will zu Programmieren muss sich neben PHP auch mit HTML beschäftigen. Sprich PHP setzt Kentniss von HTML vorraus um sinnvoll eingesetzt zu werden.
HTML wiederrum hat mit programmieren nichts zu tun, weshalb mann sich gleich 2 Konzepten ausgesetzt fühlt: Programmiersprache und Auszeichnungssprache
Inkonsistenten: MySQL Funktionen von PHP sind anders als die ODBC Funktionen. Dann gibt es wiederrum eigene Funktionen für den Zugriff auf MSSQL Datenbanken, DB2 wiederrum andere funktionen.
Python wiederrum bietet einen konsistenten Zugriff auf verschiedene Datenbanken.
Follgender MYSQL zugriff würde allein durch das ändern einer Zeile in einen MSSQL Zugriff umgewandt
Dies sind nur ein paar Beispiele wieso mann eigentlich nicht von "Einsteigerfreundlich" reden kann.
Hinzu kommt der OOP-oder-nicht-OOP von PHP. Es wird gepredigt PHP ObjectOrientiert zu programmieren, aber ein Blick in die Builtins von PHP gibt das Bild einer prozedualen Sprache zurück.
Das was PHP ausmacht, sind die vielen Funktionen die speziell für die HTML-Dynamisierung gedacht sind.
Jedoch bekommt mann keine Klassen die mann erweitern kann, sondern Funktionen.
Die Funktionen sind auch keine Objecte wie in Python sondern reine einfache funktionen ohne Namensraum und sonstwas.
Ein weiteres Problem ist, ich habe keine selbstdokumentierende Sprache. Während ich bei python die Dokumentation ganz einfach zu einem Object aufrufen kann:
Beispiel: Ein Programmierneuling will gern den follgenden String "eine, komma, seperierte, liste" an den Kommata trennen.
In Python rufe ich auf:
help(str)
und bekomme sämmtliche Methoden eines Strings geliefert. Unter anderem:
In PHP hilft nur eines: php.net - function suchen
Keyword: string bringt mir funktionen wie: stripos,stristr,strlen
Hilft nun ins Handbuch zu schaun unter String Funktionen. Das erste was mann findet:
str_split -- Konvertiert einen String in ein Array
Mann erkennt jedoch gleich das dies nicht die gesuchte Funktion ist, zum glück werden ähnliche funktionen aufgelistet, so das mann auch auf preg_split() gelenkt wird. Aber dann bekommt mann auch die Funktion split() geliefert die aber wiederrum empfiehlt preg_split () zu nutzen, oder gar explode() *die verwirrung ist komplett*.
Einsteigerfreundlich ist PHP meiner Meinung nach nicht gerade.
Nun zur Mächtigkeit von Python vs PHP .
follgender Python Code gibt mir eine Liste mit sämmtlichen Dateien aus dem Verzeichnis /home/chris/scripts zurück auf die follgende Aussagen zutreffen:
- Dateiname endet mit .py (Python Script Datei)
- Mehr als 3 Zeilen Inhalt
Inclusieve Ausnahmehandling nur ein paar einfach zu verstehende Zeilen.
Ich hab schon länger kein PHP programmiert, das stimmt. Aber wenn ich das Konstrukt nachbilde komme ich auf in etwa sowas:
Punkt 1:
die Funktion endsWith habe ich aus dem Kommentar der php.net Dokumentation zu String Funktionen.
Mag komplett falsch sein.
Punkt 2:
Es mag irgendwo andere Funktionen geben die hier und da einiges schneller und einfacher sind. Aber ich habe auf php.net recherchiert und nichts gefunden in der kurzen Zeit.
Punkt 3:
Das Python Beispiel habe ich am 2. Tag erstellt an dem ich Python gelernt habe. Ich habe das als Beispiel für die funktionsweise von filter aufgeschrieben. Es ist schon einige Zeit her aber ich kann mich noch gut errinnern das dieses Beispiel mich beeindruckt hat.
So und nun erwarte ich bösartige Antworten zu höhren, wie ich es wagen konnte PHP so schlecht zu machen
Ich komme eigentlich aus der Java Ecke. Aber ich habe Python als Beispiel genommen und nicht Java da java wiederrum komplett andere Basis zugrunde liegt als Python / PHP.
Auch habe ich die Wahrheit nicht gepachtet, und wenn ich in meinen Überlegungen grosse Fehler gemacht habe bin ich froh wenn ihr mich drauf hinweist.
Ich selber habe Projekte schon in PHP durchführen müssen! Zum glück das letzte mal vor 3 Jahren, denn ich bin ehrlich nicht begeistert von der Sprache. Drum bitte falls jemand mit Kritik an PHP nicht umgehen kann, les diesen Beitrag nicht, denn er ist nicht gerade PHP-schmeichelnd.
Ich höhre oft: PHP ist leicht zu lernen.
Nun das sehe ich anders. Die erste Hürde die mann meistern muss ist eine Apache Installation aufzusetzen.
In anderen interpretierten Sprachen reicht es den Interpreter zu installieren und mann hat sogar eine interaktive Shell in der mann die Sprache ausprobieren kann.
Beispiel die Pythonshell.
Bei meiner Ubuntu Installation ist php als Apache Modul geladen, weshalb ich nirgends einen Shell aufrufbaren Interpreter finde (z.b) /usr/local/bin/php.
Ich werde also gezwungen, wenn ich PHP lernen will, direkt auf dem Webserver zu arbeiten.
In anderen Sprachen (beispiel Python oder Ruby) habe ich nicht nur einen Interpreter den ich einfach ansteuern kann.
Code:
$ cat > test.py print "hello world" $ python test.py hello world
Code:
$ python Python 2.4.2 (#2, Sep 30 2005, 21:19:01) [GCC 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print "hello world" hello world
Weiterer Grund:
Wer damit lernen will zu Programmieren muss sich neben PHP auch mit HTML beschäftigen. Sprich PHP setzt Kentniss von HTML vorraus um sinnvoll eingesetzt zu werden.
HTML wiederrum hat mit programmieren nichts zu tun, weshalb mann sich gleich 2 Konzepten ausgesetzt fühlt: Programmiersprache und Auszeichnungssprache
Inkonsistenten: MySQL Funktionen von PHP sind anders als die ODBC Funktionen. Dann gibt es wiederrum eigene Funktionen für den Zugriff auf MSSQL Datenbanken, DB2 wiederrum andere funktionen.
Python wiederrum bietet einen konsistenten Zugriff auf verschiedene Datenbanken.
Follgender MYSQL zugriff würde allein durch das ändern einer Zeile in einen MSSQL Zugriff umgewandt
Code:
>>> from MySQLDb import connect >>> conn = connect(host="localhost",user="root",passwd="") >>> conn.select_db('mysql') >>> cursor = conn.cursor() >>> cursor.execute("SELECT * from user") 4L >>> result = cursor.fetchall() >>> for r in result: ... print r ändern in: from MSSQL import connect der rest bleibt gleich.
Hinzu kommt der OOP-oder-nicht-OOP von PHP. Es wird gepredigt PHP ObjectOrientiert zu programmieren, aber ein Blick in die Builtins von PHP gibt das Bild einer prozedualen Sprache zurück.
Das was PHP ausmacht, sind die vielen Funktionen die speziell für die HTML-Dynamisierung gedacht sind.
Jedoch bekommt mann keine Klassen die mann erweitern kann, sondern Funktionen.
Die Funktionen sind auch keine Objecte wie in Python sondern reine einfache funktionen ohne Namensraum und sonstwas.
Ein weiteres Problem ist, ich habe keine selbstdokumentierende Sprache. Während ich bei python die Dokumentation ganz einfach zu einem Object aufrufen kann:
Code:
class Greeter: ''' ich grüsse recht freundlich ''' def greet(self,name): ''' persöhnliche begrüssung ''' print 'Hallo %s ' % name >>> help(Greeter) Help on class Greeter in module __main__: class Greeter | ich grüsse recht freundlich | | Methods defined here: | | greet(self, name) | persöhnliche begrüssung
Beispiel: Ein Programmierneuling will gern den follgenden String "eine, komma, seperierte, liste" an den Kommata trennen.
In Python rufe ich auf:
help(str)
und bekomme sämmtliche Methoden eines Strings geliefert. Unter anderem:
Code:
| split(...) | S.split([sep [,maxsplit]]) -> list of strings | | Return a list of the words in the string S, using sep as the | delimiter string. If maxsplit is given, at most maxsplit | splits are done. If sep is not specified or is None, any | whitespace string is a separator. somit kann ich erkennen das ich das ganze so erreiche mystr = "eine, komma, seperierte, liste" myarr = mystr.split(",")
Keyword: string bringt mir funktionen wie: stripos,stristr,strlen
Hilft nun ins Handbuch zu schaun unter String Funktionen. Das erste was mann findet:
str_split -- Konvertiert einen String in ein Array
Mann erkennt jedoch gleich das dies nicht die gesuchte Funktion ist, zum glück werden ähnliche funktionen aufgelistet, so das mann auch auf preg_split() gelenkt wird. Aber dann bekommt mann auch die Funktion split() geliefert die aber wiederrum empfiehlt preg_split () zu nutzen, oder gar explode() *die verwirrung ist komplett*.
Einsteigerfreundlich ist PHP meiner Meinung nach nicht gerade.
Nun zur Mächtigkeit von Python vs PHP .
follgender Python Code gibt mir eine Liste mit sämmtlichen Dateien aus dem Verzeichnis /home/chris/scripts zurück auf die follgende Aussagen zutreffen:
- Dateiname endet mit .py (Python Script Datei)
- Mehr als 3 Zeilen Inhalt
Code:
def my_file_filter(file): try: handle = open(file) if len(handle.readlines()) > 3: return True return False except: return False b = filter(my_file_filter,filter( (lambda file : file.endswith('.py')), os.listdir("/home/chris/scripts") ))
Ich hab schon länger kein PHP programmiert, das stimmt. Aber wenn ich das Konstrukt nachbilde komme ich auf in etwa sowas:
Code:
<?PHP function endsWith($str,$sub) { return (substr($str,strlen($str) - strlen($sub)) == $sub); } $d = dir("/home/chris/scripts"); while( ($entry = $d->read()) !== false) { if(endsWith($entry,".py")){ $h = fopen("/home/chris/scripts/".$entry); while(!feof($h)) { $b = fgets($h); // usw ...... } } } ?>
die Funktion endsWith habe ich aus dem Kommentar der php.net Dokumentation zu String Funktionen.
Mag komplett falsch sein.
Punkt 2:
Es mag irgendwo andere Funktionen geben die hier und da einiges schneller und einfacher sind. Aber ich habe auf php.net recherchiert und nichts gefunden in der kurzen Zeit.
Punkt 3:
Das Python Beispiel habe ich am 2. Tag erstellt an dem ich Python gelernt habe. Ich habe das als Beispiel für die funktionsweise von filter aufgeschrieben. Es ist schon einige Zeit her aber ich kann mich noch gut errinnern das dieses Beispiel mich beeindruckt hat.
So und nun erwarte ich bösartige Antworten zu höhren, wie ich es wagen konnte PHP so schlecht zu machen
Ich komme eigentlich aus der Java Ecke. Aber ich habe Python als Beispiel genommen und nicht Java da java wiederrum komplett andere Basis zugrunde liegt als Python / PHP.
Auch habe ich die Wahrheit nicht gepachtet, und wenn ich in meinen Überlegungen grosse Fehler gemacht habe bin ich froh wenn ihr mich drauf hinweist.
Kommentar