kostenloser Webspace werbefrei: lima-city


OOP in PHP?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    lol4me

    lol4me hat kostenlosen Webspace.

    Kann mir bitte wer den Sinn erklären?
    Ich habe schon öfters auf Webseiten die sich mit PHP-Entwicklung beschäftigen darüber gelesen, aber ich verstehe nicht wozu das gut sein soll.

    Wenn ich ein Spiel oder entwickeln würde würde ich es ja verstehen.
    Aber z. B. jetzt ein einfacher Registrierungsskript in PHP:

    <?php
    mysql_connect(\"...\");
    mysql_select_db(\"...\")

    $name = $HTTP_POST_VARS[\'name\'];
    $pass = $HTTP_POST_VARS[\'pass\'];
    $pass = md5($pass);

    if(mysql_num_rows(mysql_query(\"SELECT Name FROM ... WHERE Name = \'$name\'\")) == 0)
    {
    mysql_query(\"INSERT INTO ... (Name,Passwort)VALUES(\'$name\',\'$pass\')\");
    echo \"0\";
    }
    else
    {
    echo \"1\";
    }
    ?>

    Der Skript wird vom Browser per Ajax aufgerufen und je nach Output wird ein anderer Text angezeigt.
    Aber wie würde soetwas OOP-Mäßig aussehen? Ich wüsste garnicht was ich da zu Objekten machen könnte.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Objekte:
    - Datenbank
    - Benutzer
    - Controller
    - Model
    - View

    Die letzten drei Objekte beziehen sich auf das MVC-Konzept (http://de.wikipedia.org/wiki/Model_View_Controller).

    Wenn du noch spezielle Fragen hast, dann frag am besten irgendwie konkreter nach oder melde dich per PN/ICQ/E-Mail etc. ;-)

  4. Kann mir bitte wer den Sinn erklären?
    Ich habe schon öfters auf Webseiten die sich mit PHP-Entwicklung beschäftigen darüber gelesen, aber ich verstehe nicht wozu das gut sein soll.

    Wenn ich ein Spiel oder entwickeln würde würde ich es ja verstehen.
    Aber z. B. jetzt ein einfacher Registrierungsskript in PHP:

    Ähm, wer sagt denn, dass OOP einen Vorteil bei einfachen Scripts bringen soll? Und noch dazu in so einer schrecklich primitiven Sprache wie PHP, die OOP nur als Anbauteil enthält ...

    Der Vorteil von OOP ist Modularisierung -- die Aufteilung eines Programms in Teile, die Teilprobleme lösen und wiederverwendet werden können. Ein OOP-Programm besteht aus mehreren Schichten. Die unterste kommuniziert mit dem Betriebssystem, der Hardware oder der Programmumgebung (bei Systemen wie PHP). Die oberste Schicht ist im Idealfall nur das initialisieren eines einzelnen Objekts.


    <?php
    mysql_connect(\"...\");
    mysql_select_db(\"...\")

    $name = $HTTP_POST_VARS[\'name\'];
    $pass = $HTTP_POST_VARS[\'pass\'];
    $pass = md5($pass);

    if(mysql_num_rows(mysql_query(\"SELECT Name FROM ... WHERE Name = \'$name\'\")) == 0)
    {
    mysql_query(\"INSERT INTO ... (Name,Passwort)VALUES(\'$name\',\'$pass\')\");
    echo \"0\";
    }
    else
    {
    echo \"1\";
    }
    ?>

    Der Skript wird vom Browser per Ajax aufgerufen und je nach Output wird ein anderer Text angezeigt.

    ... oder gar nichts oder eine unverständliche Fehlermeldung, wenn was schief geht. Du verwendest AJAX und HTTP_POST_VARS gemeinsam ... AJAX ist (noch) eine aktuelle Technologie. Scripts dagegen, die HTTP_POST_VARS benutzen, sind sowas von PHP-Steinzeit, dass ein aktuelles PHP gar nichts mehr mit diesen Variablen anfangen kann. Oft sind auch die in solchen Scripts verwendeten Programmiertechniken nicht mehr up-to-date. Und wie zu erwarten, fehlen fast sämtliche Fehler-Kontrollen. Ein Script sollte immer prüfen, ob es eine angeforderte Ressource (Datenbankverbindung, Query-Result, $_POST-Variable) auch bekommen hat. Außerdem sollten von außen eingespeiste Daten nicht ungeprüft in eine Datenbank gekippt werden. SQL-Injection und Co. lassen grüßen ... ;-)


    Aber wie würde soetwas OOP-Mäßig aussehen? Ich wüsste garnicht was ich da zu Objekten machen könnte.


    Es gibt seit längerer Zeit für die Arbeit mit Datenbanken in PHP objektorientierte Schnittstellen (AdoDB, PEAR_DB, PDO und auch für die meisten SQL-Schlagmichtot-Extensions). Das Ganze könnte dann so aussehen:

    $db = new blablubb_mysql_class($connection);
    $db->select($datenbank);
    
    // der folgende Scheiß bleibt fast so
    // in Perl könnte man das mit Hilfe des CGI-Moduls
    // auch objekt-orientiert machen:
    $name = $_POST[\'name\'];
    $pass = md5( $_POST[\'pass\'] );
    // übrigens entfernst du durch diese Umkopieraktionen die
    // hässlichen/sperrigen $_POST[\'\']-Variablen aus deinem
    // Blickfeld, auf dem Weg entgeht dir an der 
    // entscheidenden Stelle ( ->query() ),
    // dass man Benutzereingaben nicht ungeprüft/unumgewandelt in 
    // einen SQL-Query schreiben sollte ....
    
    if($db->num_rows($db->query(\"SELECT Name FROM ... WHERE Name = \'$name\'\")) == 0) {
      $db->query(\"INSERT INTO ... (Name,Passwort)VALUES(\'$name\',\'$pass\')\");
    echo \"0\";
    }
    else {
      echo \"1\";
    }


    Das ist selbstverständlich nur umgeschrieben. Im Kern ist es die gleiche Soße. Keiner der Vorteile der OOP kommt hier zum Tragen.

    OOP mit (richtigen) Webanwendungen zu lernen, ist auch IMHO nicht der beste Weg. Gerade das MVC-Konzept ist bei Serverscripts eigentlich Quark. View und Control stellt da nämlich der Web-Browser dar (erst recht mit AJAX). Fange lieber erstmal klein an:

    http://www.lima-city.de/boards/thread/24593/100/0#218126
    Fast das Gleiche nochmal, aber mit richtigen Umlauten:
    http://forum.de.selfhtml.org/archiv/2005/9/t115522/

    ... und wenn es geht mit einer vernünftigen Sprache. Vernünftige OOP ist mit PHP nicht wirklich machbar.


    Beitrag geändert: 18.4.2008 23:57:36 von alopex
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!