Ankündigung

Einklappen
Keine Ankündigung bisher.

OOP => MySQL Klasse

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

  • OOP => MySQL Klasse

    Hi,

    ich habe gerade mti OOP angefangen und würde mir gerne eine eigene MySQL Klasse schreiben.
    Ok bis jetzt habe ich mal so angefangen:

    PHP-Code:
    <?php

    include('../juca/config.inc.php');

    class 
    mysql {
        
        function 
    get_numbers ($sql) {
            
    $result mysql_query($sql);
            
    $return mysql_num_rows($result);
        
            return 
    $return;
        }
    }
    $sql "SELECT topic_id FROM board_topics";

    $numbers = new mysql();

    echo 
    'Es gibt ';
    $numbers -> get_numbers($sql);
    echo 
    ' Topics.';
    ?>
    Ich denke es ist mal total alles falsch.
    Es klappt auch nicht wirklich, mir wird keine Zahl ausgeben.
    Da ich aber von OOP noch nicht wirklich viel verstehe, brauche ich bitte eure Hilfe.
    Danke


  • #2
    Hallo Kein Genie,

    ich habe gerade mti OOP angefangen und würde mir gerne eine eigene MySQL Klasse schreiben.
    Das ist grundsätzlich löblich. Nur
    - hast du dich damit auseinandergesetzt was OOP ist?
    - hast du bereits Literatur gelesen?


    Ich denke es ist mal total alles falsch.
    Wie kommst du auf so eine Aussage? Syntaktisch ist das sicher erst mal alles richtig.


    Es klappt auch nicht wirklich, mir wird keine Zahl ausgeben.
    Das kann auch nicht funktionieren, da du vorher kein mysql_connect() ausführst. Man kann keine Query schicken ohne eine Verbindung zu einem MySQL-Server zu haben. Das solltest du aber auch alleine herausgefunden haben, denn du wirst sicher Fehlermeldungen bekommen haben. Ein Blick ins Manual verrät dann, dass keine Verbindung besteht.


    Da ich aber von OOP noch nicht wirklich viel verstehe, brauche ich bitte eure Hilfe.
    Das hat rein garnichts mit OOP zu tun, sondern kann dir in prozeduraler Schreibweise auch passieren.

    Suchst du ein Beispiel für eine MySQL-Klasse dann kannst du mal in meinem Beispiel-Webseite (http://media.adventure-php-framework...l_webseite.zip) im Ordner apps/core/database nachsehen, sort ist ein - wie ich meine - ganz gutes Beispiel.

    Ich würde dir empfehlen, erst mal das Manual zum Thema MySQL zu lesen und danach Literatur zu OOP. es geht bei OOP nämlich im wesentlichen nicht darum einfach nur Klassen zu haben, sondern es geht um das DESIGN dahinter.
    Danke
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design before you start to write code!
    2. Discuss and review it together with experts!
    3. Choose good tools (-> Adventure PHP Framework (APF))!
    4. Write clean and reusable software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar


    • #3
      Also, ich habe eine Verbindung zu DB, das hätte ich vielleicht noch erwähnen sollen. Ich habe in der config.inc.php die ich am anfang einbinde eine DB Verbindung aufgeaut.

      Und ich arbeite mit folgendem Tutorial http://www.selfphpfriend.de/praxisbu...h.php?group=37

      Also dort habe ich angefangen über OOP zu lesen und ws es eigentlich ist.
      Daher will ich jetzt mein Forum in Version 2 mit OOP bestücken.

      Kommentar


      • #4
        Hallo Kein Genie,

        Also, ich habe eine Verbindung zu DB, das hätte ich vielleicht noch erwähnen sollen. Ich habe in der config.inc.php die ich am anfang einbinde eine DB Verbindung aufgeaut.
        Das hat aber definitely nicht mit OOP zu tun. Im Rahmen der OOp geht man davon aus, die Software in verschiedene Schichten zu unterteilen. Das könnte so aussehen:


        1. Präsentation
        2. Business-Schicht
        3. Datenschicht
        4. MySQL-Klasse


        Wenn man das weiterdenkt, so MUSS es direkte Aufgabe der MySQL-Klasse sein, die Verbindung herzustellen und die Datenschicht darf sich nicht um das Thema kümmern dürfen.


        Also dort habe ich angefangen über OOP zu lesen und ws es eigentlich ist.
        Daher will ich jetzt mein Forum in Version 2 mit OOP bestücken.
        Da es bei OOP auch darum geht nach dem Paradigma "think before you code" z uleben, solltest du dir erst mal Gedanken machen, was die Klasse, bzw. eigentlich Schicht können/leisten soll.
        Ich würde sagen, so soll eine abstrahierte Möglichkeit bieten, auf eine Datenquelle "MySQL" zuzugreifen. Damit muss die Datenschicht (öffentliche) Methoden kennen, die sowas zulassen. From the scratch:

        Ich würde erwarten, dass ich Methoden mit dem Namen

        - executeSQL()
        - getNumRows()
        - getLastID()
        - setConnection()

        hat.

        Und jetzt kommst du!
        Viele Grüße,
        Dr.E.

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Think about software design before you start to write code!
        2. Discuss and review it together with experts!
        3. Choose good tools (-> Adventure PHP Framework (APF))!
        4. Write clean and reusable software only!
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Kommentar


        • #5
          [klugscheiß]
          Zitat von dr.e.
          Das hat aber definitely nicht mit OOP zu tun. Im Rahmen der OOp geht man davon aus, die Software in verschiedene Schichten zu unterteilen. Das könnte so aussehen:


          1. Präsentation
          2. Business-Schicht
          3. Datenschicht
          4. MySQL-Klasse
          Das ist so nicht richtig. OOP unerteilt Anwendungsgebiete nur in Objekte. Das MVC-Pattern ist eine Ausprägung von OOP, nicht eine Folge
          [/klugscheiß]

          Pack die Verbindungsdaten einfach in den Konstruktor.
          Nicht jeder Fehler ist ein Bug.

          Kommentar


          • #6
            ok.
            Ich habe jetzt mal weiter gemacht udn alles klappt

            PHP-Code:
            <?php
            error_reporting 
            (E_ALL);

            include(
            '../juca/config.inc.php');

            class 
            mysql {

                public function 
            __construct() {
                    
            $mysql_config_host             'localhost';
                    
            $mysql_config_user              'root';
                    
            $mysql_config_password           '';
                    
            $mysql_config_database        'juca';

                    if (!((
            $dblink mysql_connect($mysql_config_host,$mysql_config_user,$mysql_config_password)) && (mysql_select_db($mysql_config_database,$dblink)))) die(mysql_error());
                }
                
                public function 
            get_numbers ($sql) {
                    
            $result mysql_query($sql);
                    
            $return mysql_num_rows($result);
                
                    echo 
            $return;
                }
                
                public function 
            select ($sql) {
                    
            $return mysql_query($sql);
                
                    return 
            $return;
                }
            }

            $sql2 "SELECT board_name FROM board_boards";
            $numbers = new mysql($sql2);

            echo 
            'Es gibt ';
            $numbers -> get_numbers($sql2);
            echo 
            ' Boards

            '
            ;

            $k $numbers -> select($sql2);

            while(
            $ke mysql_fetch_assoc($k))
            {
                echo 
            $ke['board_name'];
            }

            ?>

            Kommentar


            • #7
              vieleicht mal hier vorbeischauen:
              http://tut.php-q.net/mysql-class.html
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Zitat von KingCrunch
                [klugscheiß]
                Zitat von dr.e.
                Das hat aber definitely nicht mit OOP zu tun. Im Rahmen der OOp geht man davon aus, die Software in verschiedene Schichten zu unterteilen. Das könnte so aussehen:


                1. Präsentation
                2. Business-Schicht
                3. Datenschicht
                4. MySQL-Klasse
                Das ist so nicht richtig. OOP unerteilt Anwendungsgebiete nur in Objekte. Das MVC-Pattern ist eine Ausprägung von OOP, nicht eine Folge
                [/klugscheiß]

                Pack die Verbindungsdaten einfach in den Konstruktor.
                Hallo KingCrunch,

                du musst dir meinen beitrag auch mal genau durchlesen. ich sprach von "Im Rahmen der OOp geht man davon aus, [..]" und nicht dass OOP-Philosophie Schichten sind.
                Aber Gegenfrage: macht OOP in deiner Definition Sinn, wenn man keine Patterns einsetzt?
                Viele Grüße,
                Dr.E.

                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                1. Think about software design before you start to write code!
                2. Discuss and review it together with experts!
                3. Choose good tools (-> Adventure PHP Framework (APF))!
                4. Write clean and reusable software only!
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                Kommentar


                • #9
                  Joa, klar. Wenn man einfach ne MySQL-Klasse schreibt, dann ist die ohne Pattern Und ja: Klar, kann man das per factory-Pattern auch machen. Aber wenn man NUR MySQL-Klasse braucht, lohnt sich das eher weniger
                  Nicht jeder Fehler ist ein Bug.

                  Kommentar


                  • #10
                    Ok, auch mal ne Frage stellen wollen, das war ein Punkt den ich auch noch nicht ganz verstanden habe, wofür braucht man diese Patterns eigentlich genau?

                    Kommentar


                    • #11
                      Sie vereinfachen das Leben. Patterns sind eigentlich nur Vorlagen für häufig auftretende Probleme. Wenn du zB eine Session-Klasse haben möchtest, dann wäre es schlecht, wenn du jedes mal eine neue Instanz aufmachst, da ja jede Instanz eh nur auf die selbe Session zugreifen würde. Da wäre das Singleton-Pattern sinnvoll, dass dir immer nur ein und die selbe Instanz zurück gibt.

                      PHP-Code:
                      class Session {
                        protected static 
                      $_instance null;

                        private function 
                      __construct ();
                        private function 
                      __clone ();

                        public static function 
                      getInstance ()
                        {
                          if (
                      self::$_instance=== null) {
                            
                      self::$_instance = new self ();
                          }
                          return 
                      self::$_instance;
                        }

                        
                      // Session-Code
                      }

                      $sessionObject Session::getInstance (); 
                      Jetzt kannst du dir sicher sein, dass du immer nur die identische Instanz einer Klasse bekommst. Für andere Probleme gibts eben andere Pattern.

                      Insofern: Du brauchst Patterns eigentlich nicht, aber sie haben sich für wiederkehrende Probleme als nützlich erwiesen und wieso denn auch das Rad neu erfinden
                      Nicht jeder Fehler ist ein Bug.

                      Kommentar


                      • #12
                        Hallo KingCrunch,

                        wenn ich nochmal kurz auf deinen Beitrag eingehen darf:

                        Das Schichten-Modell ist bereits ein von Martin Fowler und anderen Autoren beschriebenes Pattern. Mit einer "blöden MySQL-Klasse", die du einfach nur einsetzt schaffst du bereits eine Abstraktions-Schicht zwischen Datenbank und Anwendung, weil sich die Anwendung z.B. nicht mehr um das Connection-Handling kümmern muss. Jede weitere Schicht, wie ein Data-Mapper, ist für sich genommen auch nur eine weitere "blöde Klasse", aber im Gesamtkonzept gliedert es sich in ein Pattern mit dem Namen "Schichten-Architektur" ein.
                        Es geht ja nicht darum, dass jeder besser weiß, was nun ein Pattern ist, sondern Pattern sind "auch nur" ein Konzept, bzw. konzeptioneller Lösungs-Ansatz - wie du bereits ausgeführt hast - für ein Problem. Einfach gesprochen arbeitet jeder bereits unbewusst mit dem Schichten-Abstraktions-Pattern, wenn er versucht einzelne, aber gemeinsam genutzte Bereiche auszugliedern. Ist das nun eine Klasse, oder eine Funktion ist dabei jedoch egal.

                        Grundsätzlich solltest du jedoch nicht von der Hand weise, dass OOP nichts ohne OOD ist. Es macht keinen Sinn Klassen und Objekte zu definieren, ohne auch zu beschreiben, wie die Beziehung zwischen diesen Objekten ist und welche Rolle diese im Gesamtkonzept spielen. OO wurde unlängst auch deswegen eingeführt, weil man damit die Realität (z.B. Kunde und Verkäufer und deren Beziehung) besser abbilden kann.

                        So long...
                        Viele Grüße,
                        Dr.E.

                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        1. Think about software design before you start to write code!
                        2. Discuss and review it together with experts!
                        3. Choose good tools (-> Adventure PHP Framework (APF))!
                        4. Write clean and reusable software only!
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                        Kommentar


                        • #13
                          Hab ich "blöde Klasse" gesagt? ^^ Naja, egal. Zumindest machen für mich Schichten-Abstraktionen noch keine Pattern. Soweit ich das verstanden habe (und da darfst du gerne wieder drauf ansetzen im schlimmsten Fall lern ich was dazu ) einfach "Lösungsbeispiele" für wiederkehrende Probleme.

                          Das OOP ohne OOD nicht wirklich ist, liegt scho ma daran, dass sich beide gegenseitig bedingen. Wenn ich eine Klasse schreibe, dann steht sie irgendwie in Beziehung zu anderen Klassen oder im einfachsten Fall zu sich selbst. Wenn ich andersherum ein Design erstelle, folgen daraus später die Klassen.

                          Zu deinem letzten Satz: Hab da irgendwann einen netten Kurzbeitrag drüber gelesen, was OO eigentlich soll, weils eigentlich für einen Compiler und Prozessor ziemlich katastrophal ist (Performance). Es gibt ja nichts, was weiter von einer Prozessorarchitektur entfernt sein kann, als Objekte, weswegen Compiler das dementsprechend übersetzen müssen. Es liegt aber in der Natur des Menschen Objekte und deren Eigenschaften und Fähigkeiten leichter erfassen zu können.

                          Aber wir schweifen wieder ab
                          Nicht jeder Fehler ist ein Bug.

                          Kommentar


                          • #14
                            Hallo KingCrunch,

                            Hab ich "blöde Klasse" gesagt? ^^ Naja, egal.
                            Nein hast du nicht, war nur ein rhetorisches Mitel von mir. :wink:


                            Zumindest machen für mich Schichten-Abstraktionen noch keine Pattern. Soweit ich das verstanden habe (und da darfst du gerne wieder drauf ansetzen im schlimmsten Fall lern ich was dazu ) einfach "Lösungsbeispiele" für wiederkehrende Probleme.
                            Da muss ich dich enttäuschen. Lies mal den Fowler und du wirst sehen, dass das definitiv ein Pattern ist um Software zu strukturieren.
                            Wenn du dir mal die Implementierung des TCP/IP-Stacks als Beispiel nimmst, ist das quasi so eine Schichtung. Denn ob ich die Daten über Kupfer oder Glasfaser übertrage ist dem kompletten Ablauf der Datenübertragung egal. Es wird einfach eine Schicht mit ihren Schnittstellen nach oben unt unten ausgetauscht und die Daten können weiter fließen. Damit bleibt man durch eine Schichtung der Protokollebenen flexibel für andere Medien und andere Abläufe (oder auch weitere Schichten) offen.

                            Siehe http://www.martinfowler.com/bliki/La...rinciples.html.

                            [EDIT]: Oder auch

                            - http://www.martinfowler.com/eaaCatal...viceLayer.html
                            - http://www.codeproject.com/gen/bookr...peaareview.asp
                            Viele Grüße,
                            Dr.E.

                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            1. Think about software design before you start to write code!
                            2. Discuss and review it together with experts!
                            3. Choose good tools (-> Adventure PHP Framework (APF))!
                            4. Write clean and reusable software only!
                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                            Kommentar


                            • #15
                              Link is tot ^^ Zum Rest werd ich erst etwas sage, wenn ich weiß, dass ich mich in eine Sackgasse verrenne
                              Nicht jeder Fehler ist ein Bug.

                              Kommentar

                              Lädt...
                              X