PHP Kritik

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Kritik

    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.

    Code:
    $ cat > test.py
    print "hello world"
    $ python test.py
    hello world
    sondern auch eine eine interaktive shell die mich sofort python Ausdrücke auswertet. Sprich es reicht ein aufruf von:

    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
    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

    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.
    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:

    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(",")
    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

    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") ))
    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:

    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 ......
        }
      }
    }
    ?>
    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.

  • #2
    1. es zwingt dich ja keiner mit php zu programmieren

    2. php wurde nun mal fürs web entwickelt, da brauchst du html

    3. ich würde niemals php aus der shell ausführen, da gibts bessere sprachen

    4. einige sachen stören mich auch gewaltig, besonders die benamung der internen funktionen
    - strcomp aber
    - str_replace
    - stripslashes aber
    - strip_tags

    5. oop -> php4 bäh, php5 deutlich verbessert

    6. allerdings halte ich php nach wie vor für die einsteigerfreundlichste variante. bei anderen sprachen ist der lernaufwand meiner meinung nach deutlich höher.

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Re: PHP Kritik

      Original geschrieben von Schlange
      Ich höhre oft: PHP ist leicht zu lernen.
      PHP ist nach Meinung vieler erfahrener Leute sogar zu leicht zu "lernen".
      Erste "Erfolge" hat auch ein Einsteiger damit schnell erzielt - aber die ganzen Fallstricke und Stellen, an denen man Aufpassen, das Script besser absichern muss, etc. - die lernt der Neuling erst mit der Zeit.
      Wenn er viel in Foren etc. mitliest, bekommt er vielleicht dort etwas davon mit - im worst case muss er erst mal mit einem selbstgebastelten Script auf die Nase fallen, bevor er sich darum kümmert.

      (Man denke da nur an so suboptimale Konstrukte wie register_globals oder magic_quotes_gpc - echte Anfängerfallen.)

      Die erste Hürde die mann meistern muss ist eine Apache Installation aufzusetzen.
      Diese "Hürde" halte ich für nicht sonderlich hoch.
      Fertige Pakete wie XAMP und Seiten wie apachefriends.org helfen dabei schnell weiter.

      In anderen interpretierten Sprachen reicht es den Interpreter zu installieren
      Würde in PHP auch reichen, wenn du gerne nur auf der command line deine Scripte testen und ausführen möchtest.

      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.
      Jein.

      Du kannst mit PHP gerne nur Textausgaben erzeugen, wenn dir danach ist, oder nur auf dem Dateisystem/mit Datenfiles arbeiten, wenn dir danach ist.

      Du hast aber in so fern Recht, dass PHP speziell dafür entwickelt wurde, damit HTML dynamisch zu erzeugen - daher ja auch der Name, "PHP: Hypertext Preprocessor".

      Das kannst du PHP aber kaum zum Vorwurf machen - und es in der Beziehung mit anderen Sprachen, die für (teilweise) ganz andere Einsatzgebiete konzipiert wurden, zu vergleichen, hätte auch was vom sprichwörtlichen "Äpfel und Birnen vergleichen".

      Auch die Wahl der für einen bestimmten Einsatzzweck am besten geeigneten Technik will gut überlegt sein. Wer dabei Fehler macht, darf dies aber dann nicht auf die Techniken schieben.

      HTML wiederrum hat mit programmieren nichts zu tun, weshalb mann sich gleich 2 Konzepten ausgesetzt fühlt: Programmiersprache und Auszeichnungssprache
      Ja, dass das ein Problem darstellt, merkt man hier fast täglich.
      Da wollen Leute mit PHP dynamisch HTML-Seiten erstellen - und haben aber in HTML noch starke Defizite, die sich dann natürlich auch bei der "Kommunikation" mit PHP auswirken (falsch erstelle Formulare, die dann "unverständlicherweise" die Daten nicht richtig übergeben, etc.)
      Da bin ich eigentlich strikt der Meinung, dass niemand anfangen sollte, mit PHP dynamische Seiten zu erzeugen, bevor er nicht erst mal HTML in ausreichendem Maße beherrscht. Dass das Gegenteil viele nicht davon abhält, sich trotzdem in gleich mehrere neue Themengebiete gleichzeitig zu stürzen, erlebt man hier wie gesagt am laufenden Band.

      Inkonsistenten: MySQL Funktionen von PHP sind anders als die ODBC Funktionen.
      MySQL ist die DB in shared hosting Umgebungen im www, würde ich sagen.
      Also macht man es auch hier den Einsteigern wieder leichter, in dem man ihnen zum Ansprechen dieser spezielle, "einfachere" Funktionen zur Verfügung stellt.

      Aber niemand zwingt dich, diese speziellen MySQL-Funktionen zu nutzen - MySQL über ODBC anzusprechen, ist m.W. ebenfalls möglich.
      (Ggf. nicht in einer Defaultkonfiguration - aber diese ist eben, wie der Name sagt, auf die Bedürfnisse des Durchschnittsusers zugeschnitten.)

      Nun zur Mächtigkeit von Python vs PHP .
      Siehe oben, Äpfel und Birnen - dazu also von mir kein weiterer Kommentar.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Re: PHP Kritik

        und wer soll sich das alles durchlesen? in zeiten von 'nicht automatisch flasche in bier immer luft drin' finden sich da doch nur wenige.

        PHP ist leicht zu lernen.
        jo, stimmt (meine meinung). wenn man irgendwo her kommt, schon. die syntax kennen viele schon, die vokabeln kannst du im manual finden.
        Die erste Hürde die mann meistern muss ist eine Apache Installation aufzusetzen.
        apachefriends => 1h download, 1min installation, fertig.
        Ich werde also gezwungen, wenn ich PHP lernen will, direkt auf dem Webserver zu arbeiten.
        ja, dafür ists auch gemacht wurden.
        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.
        siehs mal aus meiner/unserer sicht: wir ko(a)nnten html schon vorher, haben vor dem einsatz von php immer alles per hand machen müssen. wir setzen php größtenteils ein, um html o.ä. zu erzeugen.
        - Dateiname endet mit .py (Python Script Datei)
        - Mehr als 3 Zeilen Inhalt
        läßt sich mit php genauso fix realisieren: glob/file/count

        ich kenne python nicht, kann daher nicht wirklich vergleichen ... sicher hat jede sprache ihre existenzberechtigung.
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Re: PHP Kritik

          Original geschrieben von Schlange
          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
          Seit PHP 5.1 gibts PDO

          Ansonsten schließ ich mich den Aussagen meiner Vorredner an
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar


          • #6
            Re: PHP Kritik

            Original geschrieben von Schlange
            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.
            Keine sorge, ich mag php selbst nicht sonderlich

            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.
            Das stimmt nicht, du kannst dir die php-source der cli-version besorgen und kompiliern oder auch das binary. Dann kannst du es etwa wie den perl-interpreter benutzen.

            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.
            Hier gilt, das selbe was ich eben schon sagte.

            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
            sondern auch eine eine interaktive shell die mich sofort python Ausdrücke auswertet. Sprich es reicht ein aufruf von:

            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
            und mann kann sämmtliche Beispiele eines Buches / Tutoriums durchgehen.
            Ist durchaus ein pluspunkt für andere sprachen, (lisp kennt sowas auch oder prolog) aber nicht unbedingt ein minuspunkt für php

            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
            Ich muss dich schon wieder enttäuschen, man kann in php ganz ohne html programmieren. Auf der commandozeile oder gar
            mit phpGTK auch grafisch.

            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.
            Wenn ich mich nicht arg irre gibt es eine familie von datenbankfunktionen,
            die für die verschiedenen backends jeweils einen unterschiedlichen
            prefix haben. Aber ich geb dir recht, das hätte man schöner
            machen können. Naja PDO versucht es ja.

            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.
            Php ist auch eine hybridsprache mit imperativen wurzeln.
            Es ist weit davon entfernt die features eine guten OO-sprache
            zu unterstützen, aber das ist eine andere geschichte, denn das
            ist laut auskunft der zend-leute nicht anspruch von php.

            Die Funktionen sind auch keine Objecte wie in Python sondern reine einfache funktionen ohne Namensraum und sonstwas.
            Ob es sinnvoll ist funktionen als objekte zu behandeln sei mal dahin
            gestellt. Namensräume sind allerdings etwas dass ich auch vermisse.

            Ein weiteres Problem ist, ich habe keine selbstdokumentierende Sprache. ...
            Das sind viele andere (etablierte) sprachen auch nicht, also
            befindet sich php in guter gesellschaft.

            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") ))
            Inclusieve Ausnahmehandling nur ein paar einfach zu verstehende Zeilen.
            Naja ob ein lambdaausdruck für leute ohne zumindest einen
            kleinen background in funktionaler programmierung, einfach zu
            interpretieren ist, bleibt auch mal dahin gestellt.

            Den php-code kann man auch etwas schöner machen.

            PHP-Code:
            chdir('/path/to/inspect');
            foreach (
            glob('*.py') as $filename) {
                   if(
            count(file($filename)) > 3){
                          echo 
            $filename;
                   }

            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.
            Hab ich getan, aber mit bösartigen antworten kann ich nicht dienen.
            Mir gefällt auch so einiges nicht an php. Mal sehen evtl. sag
            ich da noch mal was zu .

            greets
            Zuletzt geändert von closure; 28.03.2006, 14:09.
            (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

            Kommentar


            • #7
              zu php setzt html voraus:
              - ich nutze PHP z.B. zum XML-Datenaustausch mit nem .NET-Server via Soap - html hab ich dazu nicht gebraucht
              - Grafiken erzeugen, bearbeiten usw. ist - zumindest in nem gewissen Umfang - auch mit PHP möglich, auch hier ist kein html erforderlich.

              zur erlernbarkeit:
              ich hab davor höchstens mal vor 15 Jahren ein paar lustige Sachen auf C64 geprogged ...

              danach hat ich eigentlich ewig nicht annähernd was mit nem PC oder so am Hut, bis ich irgendwann mal mit PHP angefangen hab und ich hab die Sprache im Eiltempo erlernt (wenn auch Anfangs mit dem teilweise auf die Nase fallen wie Wahsaga es beschrieben hat) und dadurch auch schnell mitbekommen was auf nem Webserver überhaupt geschieht und wie die z.B. die Kommunikation zwischen Browser und Webserver abläuft - unglaublich aber wahr: ein Bekannter von mir der WebApplikationen mit ner höheren Programmiersprache entwickelt, hat keinen blassen Schimmer was da überhaupt im Hintergrund abläuft wie ich vor kurzem in nem Gespräch mit dem erkannt hab.
              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
              Schön - etwas Geschichte kann ja nicht schaden.
              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

              Kommentar


              • #8
                @quetschi
                wobei man anerkennen muss, dass php auch nicht
                zwingend das verständnis für die dahinter liegenden
                prozesse so bereitwillig rausrückt.

                Da lernt man mehr wenn man sprachen verwendet die
                das cgi nicht so verschleiern und auf die "alte" art arbeitet.

                Ich finde dass php keine gute sprache für den einstieg ist, wenn
                man sich ernsthaft mit programmierung beschäftigen will.
                Man gewöhnt sich allzu leicht plödsinn an, den man so schnell
                nicht mehr los wird. Schlechte bücher und tutorials tun ihren
                teil genauso dazu wie das schlechte design der sprache selbst.

                Man muss sich nur mal anschaun wieviel der kiddies da draussen
                anfangen php zu "proggn" und das tollste auf die beine stellen
                wollen aber einfach nicht die grundlagen beherrschen um an
                probleme der informatik richtig heran zu gehen. Hier wird der quick
                and dirty ansatz zur tugend erhoben.

                Und ganz ehrlich, die meisten interessiert es nicht was einer
                der "gurus" sagt, auch wenn der vll noch weit mehr zu bieten hat
                als nur die kenntnis der syntax einer bestimmten sprache.

                greets
                Zuletzt geändert von closure; 28.03.2006, 14:44.
                (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                Kommentar


                • #9
                  Original geschrieben von closure
                  Man gewöhnt sich allzu leicht plödsinn an, den man so schnell
                  nicht mehr los wird.
                  Unter anderem meinte ich auch dass, als ich von anfänglichen auf die Nase fallen schrieb - PHP tolereriert halt solche Sünden (leider).

                  Zu Dingen wie z.B. ob eine Sprache gut oder schlecht designed ist kann ich mich nicht äußern, da ich ausser PHP keine weiteren Sprachen wirklich kenne, bzw. damit umgehen kann - ich hab PHP für mich soweit erlernt, dass ich es sinnvoll für meine Aufgaben nutzen kann und von daher hat PHP halt für mich seine Berechtigung.
                  Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                  Schön - etwas Geschichte kann ja nicht schaden.
                  Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                  Kommentar


                  • #10
                    Hi,

                    sicher hat php seine berechtigung. Und wenn es
                    nicht zu irgendwas gut wäre, wäre es wohl auch
                    nicht so populär. Man stößt allerdings recht schnell
                    an die grenzen, wenn man projekte hat die ein
                    bulletin-board oder ein gästebuch an umfang
                    und komplexität überschreiten.

                    Ich behaupte dass ein projekt dieses ausmaßes
                    in php wesentlich schlechter zu managen ist und
                    damit mit höherem risiko verbunden ist, als mit einer
                    anderen im web etablierten sprache.

                    Das gilt im übrigen nicht nur für php, auch
                    risige c-projekte sind die hölle für projektmanager.

                    Das problem dass ich einfach sehe ist, dass eben
                    viele nicht die grenzen der sprache kennen und sich
                    so unter umständen an projekte wagen in der eine
                    designentscheidung die benutzung von php war obwohl
                    das risiko für das projekt damit drastisch steigt.
                    (Auch wenn das dann ein fehler des managers ist)

                    Hinzu kommt das solche sachen wie unittests erst seit
                    kurzem komfortabel auch für php genutzt werden
                    können. Diese aber ein essentieller bestandteil heute
                    gängiger methoden des projektmanagements/
                    softwarengeneerings sind. Hier sei als bespiel das
                    althergebrachte v-model oder besonders interessant
                    XP genannt.

                    Sicher kann man mit entsprechender disziplin, auch
                    ein großes projekt in php durchziehen, wenn man gewillt
                    ist größere teile der applikation in eigenentwicklung zu
                    verwirklichen (MVC-layer, DAO's,RBAC). Aber es ist
                    doch wesentlich schwierier , auch im controling,
                    als in einer anderen sprache.
                    Das führt dazu dass man sich bei einem teammeeting
                    unter umständen aufgrund eines designfehlers im schlimmsten
                    fall zum projektabbruch entscheidet oder es in einer
                    anderen sprache reimplementiert (kosten!).

                    Ich halte php für eine gute sprache wenn es ums
                    rapid prototyping geht oder für kleinere webprojekte.
                    Für größere sachen, würde ich aber z.B. java wählen
                    wenn es um webgeschichten geht. In anderen bereichen
                    dann c++.

                    greets
                    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                    Kommentar


                    • #11
                      Re: Re: PHP Kritik

                      zu closure:

                      Ist durchaus ein pluspunkt für andere sprachen, (list kennt sowas auch oder prolog) aber nicht unbedingt ein minuspunkt für php
                      Meiner Meinung nach sogar sehr. Denn dadurch das PHP Interpretiert wird dürfte die bereitstellung einer solchen Interaktiven Shell eigentlich nicht das Problem sein.
                      Für jemand der schon länger nicht mehr mit PHP gearbeitet hat, und sein Wissen einfach ein wenig auffrischen will ist das eine grosse Hilfe die bei PHP einfach fehlt.

                      Wenn ich mich nicht arg irre gibt es eine familie von datenbankfunktionen,
                      die für die verschiedenen backends jeweils einen unterschiedlichen
                      prefix haben. Aber ich geb dir recht, das hätte man schöner
                      machen können. Naja PDO versucht es ja.
                      Also 3 Möglichkeiten:
                      feste Funktionen für MySQL, MSSQL usw
                      ODBC
                      PDO

                      Verzeihung, aber hinzufügen und nochmals hinzufügen hilft nicht gerade der Konsistenz einer Sprache.
                      Wenn PDO das bestmögliche ist dann wirds zeit das mann das andere aus dem Sprachumfang rauswirt

                      Ob es sinnvoll ist funktionen als objekte zu behandeln sei mal dahin
                      gestellt. Namensräume sind allerdings etwas dass ich auch vermisse.
                      Das hätte ich nun wirklich nicht von jemand Erwartet der den Nickname closure trägt
                      Ich benutze Python u.a um Java Applicationen Scriptfähig zu machen. Ein existierendes Beispiel gibt den Anwender die möglichkeit durch das hinzufügen von "Filtern" die möglichkeit
                      die Ausgabe eines wichtigen Teils der Applikation komplett zu ändern.
                      In OOP Sprachen selber müsste ich verlangen vom "Scripter" Klassen zu erstellen die sich von bestimmten abstrakten Klassen ableiten und die "Filter-Methode" aufrufen. Und jene FilterKlassen übergeben.
                      Java regelt das u.a durch anonyme klassen

                      Code:
                      dir.listFiles( new FilenameFilter() {
                         public boolean accept(File file, String name) { 
                             if(name....  // alles ok usw
                                  return true;
                            return false;
                         }
                      }
                      In Python ansich reicht es jene Funktionen (die entweder das Framework definiert, oder der User selber) dem filter hinzuzfügen


                      Code:
                      user_filter = UserResultValidator("Mein Test")
                      user_filter.addIgnoreOnFalseTest(idValid)
                      user_filter.addIgnoreOnTrueTest(userIsPersistent)
                      user_filter.run()
                      ]



                      Das sind viele andere (etablierte) sprachen auch nicht, also
                      befindet sich php in guter gesellschaft.
                      Naja Ruby und Python sind es.

                      Naja ob ein lambdaausdruck für leute ohne zumindest einen
                      kleinen background in funktionaler programmierung, einfach zu
                      interpretieren ist, bleibt auch mal dahin gestellt.
                      lamba [parameter] : [ausdruck]

                      ist nun wirklich nicht allzu schwer :-) Solange mann sich merkt das rückgabe des lambda ausdrucks ... ähhh... der Ausdruck ist

                      Ein Beispiel das jedem lambda wohl näher bringen wird
                      summe = lambda x,y: x+y
                      summe(3,5)
                      8


                      Den php-code kann man auch etwas schöner machen.
                      Das habe ich nie bestritten. ABER: um das schöner zu machen muss mann die funktion glob() kennen. Ich habe extra geschrieben wie ich auf die lösung gekommen bin welche ich presentiert habe (ohne sie als die richtige zu bezeichnen).
                      Der Springende punkt ist das:
                      die Methode read des dir Objectes:
                      string read ( void )
                      einen String zurückgibt. dir ist für einen PHP-Anfänger garantiert die Methode die er in der doku findet wenn er etwas mit einem Verzeichnis anstellen will.
                      glob() ist natürlich geschickter, aber verlangt von anwender davon zu wissen, oder lange sämmtliche funktionen zu durchsuchen bis er sie gefunden hat.
                      War er schon dann wie ich auf dem dir() trip dann kann er den entsprechenden Code neu schreiben

                      Aber um das selbe zu machen wie mein Python Script muss ich deines noch erweitern

                      PHP-Code:
                      chdir('/path/to/inspect');
                      foreach (
                      glob('*.py') as $filename) {
                            try {
                               if(
                      count(file($filename)) > 3){
                                     
                      $validFiles[] = $filename;
                              }
                           } catch(
                      Exception $e) {}

                      Sei mir nicht bös, aber die lesbarkeit von konstrukten wie dieser Part ist alles andere als Einsteigerfreundlich.


                      Hab ich getan, aber mit bösartigen antworten kann ich nicht dienen.
                      Mir gefällt auch so einiges nicht an php. Mal sehen evtl. sag
                      ich da noch mal was zu .
                      Ich tendiere auch oft dazu soetwas wie eine Beziehung zu meinen Lieblingswerkzeugen aufzubauen. Und da muss mann sich oft schon zusammenreissen wenn Kritik daran geübt wird. Deshalb rechne ich schon mit dem einen oder anderen bösen kommentar :-)


                      zu derHund:

                      jo, stimmt (meine meinung). wenn man irgendwo her kommt, schon. die syntax kennen viele schon, die vokabeln kannst du im manual finden.
                      Naja die Syntax lehnt sich an C / Perl / Java an. Dinge wie

                      Code:
                      try {
                          // was eventuell böses
                      } catch(Exception $e) {
                          echo $e->getMessage();
                      }
                      ist eigentlich das selbe wie unter Java
                      Code:
                      try {
                        // furchtbar böses
                      } catch(Exception e) {
                         println(e.getMessage());
                      }
                      Der -> Operator ist von C++. Die Bezeichnung der Variablen mit leading $ ist Perl. Für die Programmieranfänger ist das aber unrelevant da er Perl / C / C++ / Java nicht kennt.
                      Und für jemand der schon eine der Sprachen spricht ist es ebenso unrelevant da die Syntax ansich mit der kleinste Aufwand beim lernen ist.

                      Code:
                      # python
                      i = 0
                      while i < 10:
                           print i
                           i+=1
                      
                      for i in range(10)
                          print i
                      
                      // php
                      $i = 10
                      while($i < 10) {
                          echo $i;
                          $i++
                      }
                      
                      for($i=0;$i<10;$++) {
                         echo $i
                      }
                      Diese Beispiele zeigen eigentlich nur eines. Das Prinzip ist sich ähnlich, die unterschiede liegen in der Syntax. PHP wirkt aber eindeutig Kryptischer (aus der sicht eines Programmieranfängers).

                      siehs mal aus meiner/unserer sicht: wir ko(a)nnten html schon vorher, haben vor dem einsatz von php immer alles per hand machen müssen. wir setzen php größtenteils ein, um html o.ä. zu erzeugen.
                      Mir gehts beim besten Willen nicht darum PHP die existenzberechtigung abzusprechen. Zu der Zeit als PHP in Marsch kam da gabs nicht viel mehr als CGI (Perl, CGI über C war nicht ungewöhnlich ), ASP (IIS und Windows Server war ... ähhh sicherheitstechnisch fragwürdig), JSP (Servlets) steckte einigermassen noch in den Kinderschuhen.
                      Die Frage jedoch ist, weshalb HEUTE noch eine Sprache lernen die so inkonsistent und schwierig in der Anwendung ist wobei ein mod_python, mod_ruby die selben Möglichkeiten offeriert und darüber hinaus (siehe Ruby on Rails wem das was sagt).

                      Ich nenne jetzt wirklich nicht ASP.net oder J2EE da hier die Überschneidungen der Einsatzgebieter grunsätzlich kleiner sind.

                      zu wahsage

                      Wenn er viel in Foren etc. mitliest, bekommt er vielleicht dort etwas davon mit - im worst case muss er erst mal mit einem selbstgebastelten Script auf die Nase fallen, bevor er sich darum kümmert.
                      Fallstricke gibt es wirklich in jeder Sprache.
                      Ein ganz berühmter ist in Java follgender:

                      Code:
                      String a = "eins"
                      String b = "zwei"
                      if(a==b) 
                          System.out.println("yep");
                      else 
                          System.out.println("nope");
                      kann sowohl yep als auch nope ausgeben. Kein verlass darauf was ausgegeben wird. Das hängt damit zusammen das == nicht den Inhalt testet sondern Objectgleichheit. a und b sind eigentlich unterschiedliche Objecte aber die VM optimiert das gelegentlich durch einen Stringpool weshalb je nach laune der VM a und b auf das selbe Object verweisen können.
                      Ein Fallstrick der sich beim nichtwissen davon als ziemlich harte Nuss zeigen kann. Ein angehender Java Programmierer bekommt daher in jeden Buch deutlich eingebleut a.equals(b) zu nutzen.

                      Erste "Erfolge" hat auch ein Einsteiger damit schnell erzielt
                      Ja das lass ich gelten. Aber die Erfolge kommen nicht aus der Sprache sondern aus dem Anwendungsbereich. Kaum ein "Computer-Leie" hat interresse ein Programm zu schreiben (wozu auch). Aber viele Computer-Leien haben ein interresse an einem Gästebuch für die eigene Homepage (Wer hat heutzutage keine eigene Homepage? ).
                      Die Sprache PHP ansich empfinde ich aber nicht als besonders leicht und zugänglich (aus der sicht des Programmieranfängers).
                      Eigentlich kryptischer als Ruby/Python.

                      Diese "Hürde" halte ich für nicht sonderlich hoch.
                      Fertige Pakete wie XAMP und Seiten wie apachefriends.org helfen dabei schnell weiter.
                      Nun gut, mag sein. Als ich damals nach C++ und Pascal Programmierung ein erstes Projekt mit PHP entwickeln musste habe ich meinen interpreter noch selber kompilieren müssen. Mit google und vielen geöffneten Seiten über die httpd.conf usw hab ichs dann irgendwann hinbekommen. Aber auch bei XAMP und apachefriends.org kommt einen Anfänger immer noch eine Firewall in die Quere. Und spätestens wenns darum geht einen Debugger zu nutzen (essentiell für die Programmierung) trifft mann auf die nächsten Mauern. Oder ist die Zeit der Hürde "DBG irgendwie über die IDE ansprechen" vorbei?

                      [ mein beitrag ist zu lange sagt mir ein javascript fenster - drum verzeiht muss ich 2 mal antworten :-) ]

                      Kommentar


                      • #12
                        zu Kropff:
                        1. es zwingt dich ja keiner mit php zu programmieren
                        Sei dir mal nicht so sicher :-) Gerade wenn mann im Bereich J2EE beruflich unterwegs ist und hier damals entwickelte PHP Scripte in eine J2EE Application zwängen muss...
                        Umschreiben? BSH? als CGI aufrufen und parsen? ach herrlich :-)

                        2. php wurde nun mal fürs web entwickelt, da brauchst du html
                        Naja es geht um das "PHP als Programmieranfängersprache" und das sehe ich eben u.a deshalb nicht.

                        4. einige sachen stören mich auch gewaltig, besonders die benamung der internen funktionen
                        - strcomp aber
                        - str_replace
                        - stripslashes aber
                        - strip_tags
                        Einer der Gründe weshalb mein Beispiel nicht mit glob() ausgestattet war. Es erschliesst sich niccht auf die schnelle wo mann hinzugreifen hat.

                        5. oop -> php4 bäh, php5 deutlich verbessert
                        Aber auch in php5 drücken die builtins der sprache immer wieder einen Prozedualen Stempel auf. Sprich ich gehe nicht hin und erweiter die Klassen die ich mitgeliefert bekomme sondern schreibe eine meine Klasse und rufe funktionen innerhalb dieser auf.
                        Das hat mit OOP leider zu wenig zu tun als das es eine OOP Sprache wäre.
                        Das selbe kann mann im übrigen auch von perl behaupten.


                        6. allerdings halte ich php nach wie vor für die einsteigerfreundlichste variante. bei anderen sprachen ist der lernaufwand meiner meinung nach deutlich höher.
                        Tut mir leid, aber das stimmt definitiv nicht.

                        Kommentar


                        • #13
                          Tut mir leid, aber das stimmt definitiv nicht.
                          meinst du

                          ich habe 1996 mit java angefangen und etwa 1/2 jahr gebraucht, bis ich halbwegs vernünftig damit programmieren konnte.

                          dann kamen 1998 javascript und lingo (macromedia director) hinzu. bei javascript gibt es heute noch dinge, ich ums verrecken nicht begreife. bei lingo hat es auch ziemlich lange gedauert, bis ich damit was vernünftiges hinbekommen habe.

                          dann kam 1999 perl, aber die gehört ja bekanntermaßen zu den unleserlichsten sprachen überhaupt.

                          2000 c, c++ das ist in meinen augen eh müll

                          2001 php, die erste sprache, mit der ich ohne große probleme eingestiegen bin.

                          2003 pascal/delphi nur ein wenig reingeschnüffelt, aber mein bisheriger liebling, sauber, klar strukturiert und durchdacht.

                          gruß
                          peter
                          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                          Meine Seite

                          Kommentar


                          • #14
                            Original geschrieben von Quetschi
                            unglaublich aber wahr: ein Bekannter von mir der WebApplikationen mit ner höheren Programmiersprache entwickelt, hat keinen blassen Schimmer was da überhaupt im Hintergrund abläuft wie ich vor kurzem in nem Gespräch mit dem erkannt hab.
                            Lass mich raten er hat mit J2EE (oder .net) Webapplikationen entwickelt.

                            Woher es kommt kann ich dir klar erklären. J2EE ist nochmals ein Layer zwischen dem wie ein Webserver HTTP Anfragen behandelt.

                            Ein JavaServlet kommt somit in etwa so daher:

                            Code:
                            public class HelloServlet  extends HttpServlet {
                            
                                public void doGet(HttpServletRequest request, HttpServletResponse response) {
                                   String name = request.getParameter("name");
                                   request.getWriter().write("Hallo "+ name);
                               }
                              
                               public void doPost(HttpServletRequest request, HttpServletResponse response) {
                                    doGet(request,response)
                               }
                            }
                            Sprich sämmtliche HTTP Anfragen werden ObjectOrientiert aufbereitet und der in einer Konfiguration (WEB-INF/web.xml) angegebenen Servlet aufbereitet zur verfügung gestellt.

                            PHP ist eine Abstraktion von CGI Programmierung. Servlets wiederrum sind noch eine weitere Abstratkion von dem Vorgang wie ein Webserver (der heisst unter J2EE zudem noch ServletContainer und liegt auf dem Webserver (bzw bietet beides wie Tomcat) ).
                            Wenn jemand also ein guter Java Programmierer ist der plötzlich mit J2EE zu tun hat, so kann er mit relativ wenig zusatzaufwand ziemlich ordentliche Webapplikationen erstellen.
                            Natürlich sollte jeder J2EE Programmierer wissen wie das HTTP(s) Protokoll funktioniert und wie ServletContainer vorgehen bis das ganze letztendlich bei dem Servlet landet.
                            Spätestens dann wenn jedoch noch Dinge wie Struts und / oder JSF genutzt werden, hat mann noch eine Schicht überhalb der Servlet API und kommt eigentlich gar nicht mehr mit HttpRequests ind Berührung.

                            Kommentar


                            • #15
                              Re: Re: Re: PHP Kritik

                              Also 3 Möglichkeiten:
                              feste Funktionen für MySQL, MSSQL usw
                              ODBC
                              PDO

                              Verzeihung, aber hinzufügen und nochmals hinzufügen hilft nicht gerade der Konsistenz einer Sprache.
                              Wenn PDO das bestmögliche ist dann wirds zeit das mann das andere aus dem Sprachumfang rauswirt
                              Das zauberwort heist backwardcompatibility. Das selbe problem
                              das c++ von ein paar tollen dingen abhält.
                              Nicht schön, für keine der genannten sprachen.

                              Das hätte ich nun wirklich nicht von jemand Erwartet der den Nickname closure trägt
                              Ok, ich hab das anders intepretiert und jetzt nicht an
                              funktoren oder prädikate gedacht.

                              Java regelt das u.a durch anonyme klassen

                              Code:
                              dir.listFiles( new FilenameFilter() {
                                 public boolean accept(File file, String name) { 
                                     if(name....  // alles ok usw
                                          return true;
                                    return false;
                                 }
                              }
                              Ist in c++ nicht viel anders, man schaue sich mal die stl
                              an. Fast jede funktion aus algorithm akzeptiert prädikate.
                              Code:
                              struct my_sort{
                                   bool operator()(const foo &lhs,const foo &rhs){
                                         return lhs.get_significant_value() < rhs.get_significant_value();
                                   }
                              }
                              
                              std::vector<foo> foo_vec;
                              //fill vector
                              
                              //sort vector with predicate (closure)
                              std::sort(foo_vec.begin(),foo_vec.end(),my_sort());
                              lamba [parameter] : [ausdruck]

                              ist nun wirklich nicht allzu schwer :-) Solange mann sich merkt das rückgabe des lambda ausdrucks ... ähhh... der Ausdruck ist
                              Du würdest dich wundern, auf welche verständnisschwierigkeiten
                              man stößt wenn die leute noch überhaupt nichts von solchen
                              konzepten gehört haben.

                              Das habe ich nie bestritten. ABER: um das schöner zu machen muss mann die funktion glob() kennen.
                              stimmt

                              Aber um das selbe zu machen wie mein Python Script muss ich deines noch erweitern

                              PHP-Code:
                              chdir('/path/to/inspect');
                              foreach (
                              glob('*.py') as $filename) {
                                    try {
                                       if(
                              count(file($filename)) > 3){
                                             
                              $validFiles[] = $filename;
                                      }
                                   } catch(
                              Exception $e) {}

                              Naja keine der funktionen wirft afaik ne exception, aber ich
                              weiss worauf du hinaus willst.

                              Sei mir nicht bös, aber die lesbarkeit von konstrukten wie dieser Part ist alles andere als Einsteigerfreundlich.
                              ack, wie ich bereits schrieb halte ich php auch nicht für die
                              beste einsteigersprache.

                              greets
                              (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                              Kommentar

                              Lädt...
                              X