Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP OOP lernen / üben / Verständniss

Einklappen

Neue Werbung 2019

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

  • PHP OOP lernen / üben / Verständniss

    Hallo,

    nachdem ich nun einige viele Lektüre über OOP immer wieder gelesen habe und erneut durchgelesen habe , habe ich mich nun heute rangesetzt und einmal eine MySql-Klasse erstellt. Dafür habe ich wirklich den halben Tag gebraucht..

    Was ist Sinn und Zweck dieses Threads?

    Ich würde gerne von den - schon mehr Erfahreren - ein kleines " Feedback " hören, ob ich das Verständnis von OOP kapiert habe oder ich völlig daneben liege. Verbesserungsvorschläge wären natürlich auch gut

    Fangen wir an:

    Ich habe insgesamt 4 Daten. Davon sind 2 Klassen, 1 Interface und eine ausführende Datei:

    index.php : ausführende Datei
    MySql : Hauptklasse
    Sql : abgeleitete Klasse von MySql
    Connect : Interface

    Ein UML-Diagramm habe ich mir gespart, dafür habe ich im Interface festgelegt, welche Methoden aufjedenfall vorhanden sein müssen, damit die Klassen überhaupt funktionieren.

    Hier sind die Dateien

    Connect.php

    PHP-Code:
    <?php
    /**
     *
     * @author Sven
     */
    interface Connect {

        public function 
    __construct($server$benutzername$passwort$datenbank);
        public function 
    __desctruct();
        public function 
    setDb($database);
    }
    ?>
    MySql.php

    Diese Klasse soll eine Verbinung zur Datenbank herstellen und schließen, sowie ein paar Dinge. ( Wegen der vielen anderen Methoden, habe ich diese Klasse auch von der Sql Klasse getrennt )

    PHP-Code:
    <?php
    /**
     * Description of MySql
     *
     * @author Sven
     */
    class MySql implements Connect {
        
    /*
         * @protected
         * Datenbank-Verbindung
         *
         * @resource
         */
        
    protected $_connect;
        
    /*
         * @private
         * Datenbank-Name
         *
         * @string
         */
        
    private $_database;
        
    /*
         * Stellt eine Verbindung zum Datenbank-Server her und verbindet mit der
         * Datenbank
         *
         * @param string $server; Name des Datenbank-Servers
         * @param string $username; Name des Datenbank-Benutzer
         * @param string $password; Passwort des Datenbank-Benutzer
         * @param string $database; Datenbank-Name
         *
         * @return void
         */
        
    public function  __construct($server$username$password$database) {
            
    $this->_connect = @mysql_connect($server$username$password) OR $this->getMySqlError();

            
    $this->setDb($database);
        }
        
    /*
         * Schließt die Verbindung zum Datenbank-Server
         *
         * @return void
         */
        
    public function  __desctruct() {
                
    mysql_close($this->_connect);
        }
        
    /*
         * Verbindung zur einer Datenbank aufbauen
         *
         * @param string $database; Datenbank-Name
         *
         * @return void
         */
        
    public function setDb($database) {
            if(
    is_resource($this->_connect)) {
                @
    mysql_select_db($database) OR $this->getMySqlError();
                
    $this->_database $database;
            }
        }
        
    /*
         * Zeigt alle Tabellen innerhalb der aktuellen Datenbank
         *
         * @return array $tables; Alle Tabellen
         */
        
    public function showTables() {
            
    $sql 'SHOW TABLES FROM ' $this->_database;
            
    $query mysql_query($sql);
            while(
    $row mysql_fetch_array($query)) {
                
    $tables[] = $row[0];
            }
            return 
    $tables;
        }
        
    /*
         * Zeigt alle Feldtypen an den angegebenen Tabellen
         *
         * @param array $tables; Tabellen
         *
         * @return string $html; Alle Feldtypen mit Tabellen-Name
         */
        
    public function showFieldTypes(array $tables) {
            foreach(
    $tables as $table) {
                
    $sql 'SELECT * FROM ' $table;
                
    $query = @mysql_query($sql) OR $this->getMySqlError();
                
    $fields mysql_num_fields($query);
                
    $table mysql_field_table($query0);
                
    $html .= '[ <b><i>Table : ' $table '</i></b> ]<br />';
                for(
    $i=0$i<$fields$i++) {
                    
    $type  mysql_field_type($query$i);
                    
    $name  mysql_field_name($query$i);
                    
    $len   mysql_field_len($query$i);
                    
    $flags mysql_field_flags($query$i);
                    
    $html .= '[' $name '] => ( ' $len ' ) <b>' $type '</b> { ' $flags ' }<br />';
                }
            }
            
    mysql_free_result($query);
            return 
    $html;
        }
        
    /*
         * Liefert MySQL Client Informationen
         *
         * @return string
         */
        
    public function getMySqlClient() {
            return 
    mysql_get_client_info();
        }
        
    /*
         * Liefert MySQL Host Informationen
         *
         * @return string
         */
        
    public function getMySqlHost() {
            return 
    mysql_get_host_info();
        }
        
    /*
         * Liefert MySQL Protokoll Informationen
         *
         * @return string
         */
        
    public function getMySqlProto() {
            return 
    mysql_get_proto_info();
        }
        
    /*
         * Liefert MySQL Server Informationen
         *
         * @return string
         */
        
    public function getMySqlServer() {
            return 
    mysql_get_server_info();
        }
        
    /*
         * Liefert den momentanten Serverstatus zurück
         *
         * @return array $status; Status-Informationen
         */
        
    public function getMySqlStat() {
            
    $status explode('  'mysql_stat());
            return 
    print_r($status);
        }
        
    /*
         * MySqlError ausgeben
         */
        
    protected function getMySqlError() {
            die(
    mysql_errno() . ' : ' mysql_error());
        }
    }
    ?>


    Sql.php

    Diese Klasse soll die gesamten Abfragen bearbeiten und sonstige Dinge erledigen, wie zum Beispiel, die Anzahl der geänderten Datensätze anzeigen.

    Hier habe ich auch direkt ein Problem: Wenn ich die Methode getNum() aufrufe, bekomme ich einen Fehler. Woran liegt das? Ich komm nicht drauf.

    PHP-Code:
    <?php
    /**
     * Description of Sql
     *
     * @author Sven
     */
    class Sql extends MySql implements Connect {
        
    /*
         * Der Query
         *
         * @private
         * @string
         */
        
    private $_query;
        
    /*
         * Datenbank-Abfrage
         *
         * @private
         * @resource
         */
        
    private $_sql;
        
    /*
         * Erledigt alle Abfragen die an den MySql-Server gesendet wird
         *
         * @param string $query; Der Query
         * @return bool oder bei SELECT Abfrage array
         */
        
    public function doQuery($query) {
            if(empty(
    $query)) {
                return 
    false;
            }
            
    $this->_query $query;
            
    $this->_sql mysql_query($this->_query) OR parent::getMySqlError();
            if(
    preg_match('/^select/i'$this->_query)) {
                
    $num mysql_num_rows($this->_sql);
                if(
    $num ) {
                    while(
    $row mysql_fetch_array($this->_sql)) {
                        
    $output[] = $row;
                    }
                    return 
    $output;
                }
            } else {
                
    $aff mysql_affected_rows();
                if(
    $aff 0) {
                    return 
    true;
                }
            }
            return 
    false;
        }
        
    /*
         * Liefert die Anzahl der Datensätze im Ergebnis
         *
         * @return int;
         */
        
    public function getNum() {
            return 
    mysql_num_rows($this->_sql);
        }
        
    /*
         * Liefert die Anzahl betroffener Datensätze einer vorhergehenden
         * MySQL Operation
         *
         * @return int;
         */
        
    public function getAff() {
            return 
    mysql_affected_rows();
        }
        
    /*
         * Maskiert spezielle Zeichen innerhalb eines Strings für die Verwendung
         * in einer SQL-Anweisung
         *
         * @return string; Formatierter String
         */
        
    public function getEsc($unescaped_string) {
            return 
    mysql_real_escape_string($unescaped_string);
        }
        
    /*
         * Liefert die ID einer vorherigen INSERT-Operation
         *
         * @return int
         */
        
    public function getInsertId() {
            return 
    mysql_insert_id();
        }
        
    /*
         * Gibt den Query als String wieder
         *
         * @return string $this->_query; Query
         */
        
    public function getQuery() {
            return 
    $this->_query;
        }
        
    }
    ?>
    index.php

    In dieser Datei erstelle ich die Objekte und spiele ein wenig mit Ihnen rum.

    PHP-Code:
    <?php

    /*
     * Super Funktion
     */
    function __autoload($class_name) {
        require_once(
    $class_name '.php');
    }
    /*
     * Als erstes spielen wir ein bisschen mit der MySQL Klasse herum
     */

    // Objekt erzeugen
    $mysql = new MySql('localhost','root','password','test1');

    // Zeige mir alle Tabellen in der Datenbank
    $tables $mysql->showTables();
    echo 
    '<b>Alle Tabellen:</b><br /><br />';
    foreach(
    $tables as $table) {
        echo 
    $table '<br />';
    }

    echo 
    '<br />';

    // Zeige alle Feldtypen und sonstige Informationen
    echo '<b>Zeige alle Feldtypen</b><br /><br />';
    $tables = array('kategorie');
    echo 
    $mysql->showFieldTypes($tables);

    echo 
    '<br />';

    // Setze neue Datenbank
    $tables $mysql->setDb('test2');

    // Zeige davon alle Tabellen in der Datenbank
    $tables $mysql->showTables();
    echo 
    '<b>Alle Tabellen:</b><br /><br />';
    foreach(
    $tables as $table) {
        echo 
    $table '<br />';
    }

    /*
     *  Nun spielen wir ein bisschen mit der SQL Klasse herum
     */

    // Objekt erzeugen
    $sql = new Sql('localhost','root','password','test1');

    // Mache einen neuen Eintrag in die Datenbank
    $neuer_name 'neuer Name';
    $sql->doQuery('INSERT INTO kategorie (name) VALUES ("'.$sql->getEsc($neuer_name).'")');

    echo 
    'Mit diesem Eintrag wurden ' $sql->getNum() . ' neue Eintraege aufgenommen';
    echo 
    '<br />';
    echo 
    'Der Query lautet: ' $sql->getQuery();

    echo 
    '<br /><br />';
    echo 
    'Letzte Insert-Id lautet: ' $sql->getInsertId();

    echo 
    '<br /><br />';

    // Aendere den Eintrag wieder
    $ganz_neuer_name 'ganz_neu"er_name';
    $sql->doQuery('UPDATE kategorie SET name = "'.$sql->getEsc($ganz_neuer_name).'"');
    echo 
    'Mit diesem Eintrag wurden ' $sql->getAff() . ' neue Eintraege aufgenommen';
    echo 
    '<br />';
    echo 
    'Der Query lautet: ' $sql->getQuery();
    ?>
    Und so sieht das ganze dann aus:



    Meine Frage ist also:
    Ist das so ok? Oder liege ich völlig daneben?
    Wäre nett, wenn einer etwas dazu sagen könnte

    Gruß
    Sven
    svenwegner.net

  • #2
    Es heist __destruct()! Warum unterdrueckst du Fehler mit @?
    "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

    Kommentar


    • #3
      Zitat von Schwenniii Beitrag anzeigen
      ( Wegen der vielen anderen Methoden, habe ich diese Klasse auch von der Sql Klasse getrennt )
      Wenn eine Klasse zu viele Methoden hat, solltest du dir eher Gedanken machen, ob sie nicht zu viele Aufgaben erfüllt (Faustregel: 1 Klasse, 1 Aufgabe, wobei Aufgabe!=Methode), und sie dementsprechend trennen. Bei dir sieht das 1. sehr willkürlich aus, 2. widerspricht diese "Trennung" mittels Vererbung der üblichen OO. Vererbung wird bei "ist ein"-Beziehungen eingesetzt, "SQL ist ein MySQL" ist Unsinn und dass dir für die zweite Klasse offenbar kein passender Klassenname eingefallen ist, hätte dir schon zu denken geben müssen, denn sie stellt nichts eigenständiges dar.

      Aber lass dich nicht entmutigen, das ist ein komplexes Thema was man nicht von heute auf morgen drauf hat, so wie du es angehst mit kleinen Aufgaben anfangen um die Praxis zu verstehen, ist es schon richtig
      [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
      [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

      Kommentar


      • #4
        Für den Anfang ist das gar nicht schlecht, auch wenn die bereits angesprochenen Punkte richtig sind. Du kannst Dir ja außerdem mal PDO und MySQLi anschauen; die entsprechen, denke ich, Deinen Absichten und Du siehst, wie andere das gelöst haben.

        Als in SQL und MySQL als Klassennamen gesehen habe, war ich auch etwas überrascht, weil MySQL hier eigentlich eine Untermenge von SQL und nicht umgekehrt sein müsste.

        Kommentar


        • #5
          PHP-Code:
              /*
               * Liefert die Anzahl der Datensätze im Ergebnis
               *
               * @return int;
               */
              
          public function getNum() {
                  return 
          mysql_num_rows($this->_sql);
              } 
          Wenn doQuery() vorhe rnicht ausgeführt wurde gibt das auf jeden Fall einen Fehler.

          PHP-Code:
              $this->_sql mysql_query($this->_query) OR parent::getMySqlError(); 
          Landet dann ganz sicher eine Ressource Id in $this->_sql und kein Boolean? DEr Syntax ist mir so etwas unvertraut aber ggf. ist das ja die Fehlerquelle.

          Was das OO angeht: Klassen müssen einen nachvollziehbaren Mehrwert liefern. Den sehe ich bei deinen Klassen kaum wiel du meistens nur das Resultat der nativen MySQL Funktionen zurückgibst. Wäre überall ein Error-Handler drum dann wäre das schon mal was anderes.
          "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

          Kommentar


          • #6
            Zitat von Chriz Beitrag anzeigen
            Es heist __destruct()! Warum unterdrueckst du Fehler mit @?
            Stimmt, dass ist mir garnicht aufgefallen.
            Ich unterdrücke sie nicht wirklich. Ich lasse sie ja danach mit mysql_error() & mysql_errno() ausgeben. Diese wollte ich dann später noch in eine Log-Datei eintragen lassen. ( Als nächste Übung )

            @fab & xm22

            Mein Gedankengang war eigentlich, dass ich mit der MySQL verschiedene Aufgaben erledigen kann, wie ich auch bei phpmyadmin erledigen kann.
            Eigentlich wollte ich noch die Möglichkeit bieten, dass über die Klasse noch Datenbanken oder Tabellen etc. angelegt werden können. Später sah ich, dass dann ein wenig als Schwachsinn an, da ich dies wahrscheinlich nie gebrauchen würde.

            Daher habe ich dann eine 2. Klasse erstellt ( SQL ), die ich halt für den normalen Gebrauch benutze, wie INSERT, UPDATE, DELETE usw.

            Aber gut, anscheinend lag ich wohl völlig daneben.

            Danke für eure Meinungen

            Gruß
            Sven

            P.S. Eben fiel mir ein, dass ich SQL-Abfragen ( 2. Klasse ) ja auch in phpmyadmin erledigen kann. Also war der Gedankengang an sich schon völlig sinnlos
            svenwegner.net

            Kommentar


            • #7
              Dann sollte die eher CRUD heißen, wobei das auch schlecht gewählt wäre..

              Kommentar


              • #8
                Zitat von Dark Guardian Beitrag anzeigen
                PHP-Code:
                    /*
                     * Liefert die Anzahl der Datensätze im Ergebnis
                     *
                     * @return int;
                     */
                    
                public function getNum() {
                        return 
                mysql_num_rows($this->_sql);
                    } 
                Wenn doQuery() vorhe rnicht ausgeführt wurde gibt das auf jeden Fall einen Fehler.

                PHP-Code:
                    $this->_sql mysql_query($this->_query) OR parent::getMySqlError(); 
                Landet dann ganz sicher eine Ressource Id in $this->_sql und kein Boolean? DEr Syntax ist mir so etwas unvertraut aber ggf. ist das ja die Fehlerquelle.

                Was das OO angeht: Klassen müssen einen nachvollziehbaren Mehrwert liefern. Den sehe ich bei deinen Klassen kaum wiel du meistens nur das Resultat der nativen MySQL Funktionen zurückgibst. Wäre überall ein Error-Handler drum dann wäre das schon mal was anderes.
                Hallo,

                hattest Recht. Wenn z.B. kein neuer Eintrag passiert, dann gibt mysql_query() keine Ressource Id wieder.

                Habs nun so gelöst ( Ich prüfe einfach ob $sql eine Resource ID liefert ) :

                PHP-Code:
                    /*
                     * Erledigt alle Abfragen die an den MySql-Server gesendet wird
                     *
                     * @param string $query; Der Query
                     * @return bool oder bei SELECT Abfrage array
                     */
                    
                public function doQuery($query) {
                        if(empty(
                $query)) {
                            return 
                false;
                        }
                        
                $this->_query $query;
                        
                $sql mysql_query($this->_query) OR $this->getMySqlError();
                        if(
                is_resource($sql)) {
                            if(
                preg_match('/^select/i'$this->_query)) {
                                
                $this->_num mysql_num_rows($sql);
                                if(
                $this->_num ) {
                                    while(
                $row mysql_fetch_array($sql)) {
                                        
                $output[] = $row;
                                    }
                                    return 
                $output;
                                }
                            } else {
                                
                $this->_aff mysql_affected_rows($sql);
                                if(
                $this->_aff 0) {
                                    return 
                true;
                                }
                            }
                        }
                        return 
                false;
                    }
                    
                /*
                     * Liefert die Anzahl der Datensätze im Ergebnis
                     *
                     * @return int;
                     */
                    
                public function getNum() {
                        return 
                $this->_num;
                    }
                    
                /*
                     * Liefert die Anzahl betroffener Datensätze einer vorhergehenden
                     * MySQL Operation
                     *
                     * @return int;
                     */
                    
                public function getAff() {
                        return 
                $this->_aff;
                    } 
                Gesamte neue Klasse:

                PHP-Code:
                <?php
                /**
                 * Description of MySql
                 *
                 * @author Sven
                 */
                class MySql implements Connect {
                    
                /*
                     * @private
                     * Datenbank-Verbindung
                     *
                     * @resource
                     */
                    
                private $_connect;
                    
                /*
                     * @private
                     * Datenbank-Name
                     *
                     * @string
                     */
                    
                private $_database;
                    
                /*
                     * Der Query
                     *
                     * @private
                     * @string
                     */
                    
                private $_query;
                    
                /*
                     * Anzahl der Datensätze im Ergebnis
                     *
                     * @private
                     * @int
                     */
                    
                private $_num;
                    
                /*
                     * Anzahl betroffener Datensätze
                     *
                     * @private
                     * @int
                     */
                    
                private $_aff;
                    
                /*
                     * Stellt eine Verbindung zum Datenbank-Server her und verbindet mit der
                     * Datenbank
                     *
                     * @param string $server; Name des Datenbank-Servers
                     * @param string $username; Name des Datenbank-Benutzer
                     * @param string $password; Passwort des Datenbank-Benutzer
                     * @param string $database; Datenbank-Name
                     *
                     * @return void
                     */
                    
                public function  __construct($server$username$password$database) {
                        
                $this->_connect mysql_connect($server$username$password) OR $this->getMySqlError();

                        
                $this->setDb($database);
                    }
                    
                /*
                     * Schließt die Verbindung zum Datenbank-Server
                     *
                     * @return void
                     */
                    
                public function  __destruct() {
                            
                mysql_close($this->_connect);
                    }
                    
                /*
                     * Verbindung zur einer Datenbank aufbauen
                     *
                     * @param string $database; Datenbank-Name
                     *
                     * @return void
                     */
                    
                public function setDb($database) {
                        if(
                is_resource($this->_connect)) {
                            
                mysql_select_db($database) OR $this->getMySqlError();
                            
                $this->_database $database;
                        }
                    }
                    
                /*
                     * Zeigt alle Tabellen innerhalb der aktuellen Datenbank
                     *
                     * @return array $tables; Alle Tabellen
                     */
                    
                public function showTables() {
                        
                $sql 'SHOW TABLES FROM ' $this->_database;
                        
                $query mysql_query($sql);
                        while(
                $row mysql_fetch_array($query)) {
                            
                $tables[] = $row[0];
                        }
                        return 
                $tables;
                    }
                    
                /*
                     * Zeigt alle Feldtypen an den angegebenen Tabellen
                     *
                     * @param array $tables; Tabellen
                     *
                     * @return string $html; Alle Feldtypen mit Tabellen-Name
                     */
                    
                public function showFieldTypes(array $tables) {
                        foreach(
                $tables as $table) {
                            
                $sql 'SELECT * FROM ' $table;
                            
                $query mysql_query($sql) OR $this->getMySqlError();
                            
                $fields mysql_num_fields($query);
                            
                $table mysql_field_table($query0);
                            
                $html .= '[ <b><i>Table : ' $table '</i></b> ]<br />';
                            for(
                $i=0$i<$fields$i++) {
                                
                $type  mysql_field_type($query$i);
                                
                $name  mysql_field_name($query$i);
                                
                $len   mysql_field_len($query$i);
                                
                $flags mysql_field_flags($query$i);
                                
                $html .= '[' $name '] => ( ' $len ' ) <b>' $type '</b> { ' $flags ' }<br />';
                            }
                        }
                        
                mysql_free_result($query);
                        return 
                $html;
                    }
                    
                /*
                     * MySqlError ausgeben
                     */
                    
                private function getMySqlError() {
                        die(
                mysql_errno() . ' : ' mysql_error());
                    }
                    
                /*
                     * Erledigt alle Abfragen die an den MySql-Server gesendet wird
                     *
                     * @param string $query; Der Query
                     * @return bool oder bei SELECT Abfrage array
                     */
                    
                public function doQuery($query) {
                        if(empty(
                $query)) {
                            return 
                false;
                        }
                        
                $this->_query $query;
                        
                $sql mysql_query($this->_query) OR $this->getMySqlError();
                        if(
                is_resource($sql)) {
                            if(
                preg_match('/^select/i'$this->_query)) {
                                
                $this->_num mysql_num_rows($sql);
                                if(
                $this->_num ) {
                                    while(
                $row mysql_fetch_array($sql)) {
                                        
                $output[] = $row;
                                    }
                                    return 
                $output;
                                }
                            } else {
                                
                $this->_aff mysql_affected_rows($sql);
                                if(
                $this->_aff 0) {
                                    return 
                true;
                                }
                            }
                        }
                        return 
                false;
                    }
                    
                /*
                     * Liefert die Anzahl der Datensätze im Ergebnis
                     *
                     * @return int;
                     */
                    
                public function getNum() {
                        return 
                $this->_num;
                    }
                    
                /*
                     * Liefert die Anzahl betroffener Datensätze einer vorhergehenden
                     * MySQL Operation
                     *
                     * @return int;
                     */
                    
                public function getAff() {
                        return 
                $this->_aff;
                    }
                    
                /*
                     * Maskiert spezielle Zeichen innerhalb eines Strings für die Verwendung
                     * in einer SQL-Anweisung
                     *
                     * @return string; Formatierter String
                     */
                    
                public function getEsc($unescaped_string) {
                        return 
                mysql_real_escape_string($unescaped_string);
                    }
                    
                /*
                     * Liefert die ID einer vorherigen INSERT-Operation
                     *
                     * @return int
                     */
                    
                public function getInsertId() {
                        return 
                mysql_insert_id();
                    }
                    
                /*
                     * Gibt den Query als String wieder
                     *
                     * @return string $this->_query; Query
                     */
                    
                public function getQuery() {
                        return 
                $this->_query;
                    }
                }
                ?>
                Ich denke so macht, dass ganze wieder Sinn.

                Gruß
                Sven
                svenwegner.net

                Kommentar


                • #9
                  Das was du da gebaut hast gibt es schon ( siehe [MAN]mysqli[/MAN] ), wie wärs denn wenn du dir als Ziel setzen würdet für eine MySQL-Klasse:

                  - Klasse erweitert sich selbst und behandelt die tables als kindklasse die der user durchsuchen oder erweitern möchte
                  - Klasse unterstützt ( vorerst ) einfache vorgänge ( SELECT , INSERT INTO, UPDATE )
                  - Klasse arbeitet mit Arraystrukturen als Input-Values

                  Beispiele ( des Ergebnisses ):
                  PHP-Code:
                  $db = new MyOwnSQL$host$user$pass$db ); // verbinde zur datenbank

                  // führe ein Select durch in table "operate_at_me"
                  $select_this = array("id""name""link");
                  $where_this = array("id" => "0293");
                  $limit = array(1,1);

                  $result $db->operate_at_me->select($select_this$where_this$limit);

                  while ( 
                  $data $result->fetch_object() ) {
                    echo 
                  "ID: ".$data->ID."<br />";
                    echo 
                  "Name: ".$data->name."<br />";
                    echo 
                  "Link: ".$data->link;

                  Eine besonderheit der Klasse wäre z.b. eine Automatisches escapen der eingabe werte der Arrays. Außerdem hättest du hier dann eine Klasse die im gegenzug zur MySQLi-Klassenstruktur mit Arrays als Eingabewerte arbeiten könnte. Generell aber erstmal SELECT, INSERT INTO und UPDATE vllt. noch DELETE FROM unterstützt. Als Übungsaufgabe denke ich relativ 'gut' um das OOP-Verständniss zu testen.
                  [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                  Kommentar


                  • #10
                    Auf PHP.net wird gesagt, dass die Benutzung von MySQL abgeraten wird und man eher auf MySQLi umsteigen sollte oder gar komplett auf PDO.

                    Um OOP zu lernen, würde ich nicht mit einer SQL-Klasse beginnen. Eher mit einer Lebewesenklasse, die als Kinder Tiere, Menschen und Pflanzen hat usw.
                    Crashkurs zum Thema Rechtschreibung: [COLOR="Green"]normalerweise[/COLOR] ([COLOR="Red"]normaler weise[/COLOR] oder [COLOR="Red"]normaler weiße[/COLOR]), [COLOR="DarkGreen"]Standard[/COLOR] ([COLOR="Red"]Standart[/COLOR]), [COLOR="DarkGreen"]eben[/COLOR] ([COLOR="Red"]ebend[/COLOR])

                    Kommentar

                    Lädt...
                    X