MySQL Klasse und andere Klassen - Verständnis

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

  • MySQL Klasse und andere Klassen - Verständnis

    Hey,

    ich habe jetzt mal eine Grundverständnisfrage!

    Ich arbeite OOP. Ich habe 2 Klassen z.b. "user" und "data".
    Die user-klasse beinhaltet alle funktionen zu benutzerverwaltung und die data-klasse, macht paar berechnungen von mir aus.

    Jetzt habe ich aber noch eine klasse "mysql" in der alle nötigen mysql-funktionen verbaut sind.

    In der user-klasse werden in vielen funktionen z.b. "Erstellen eines Benutzer"" oder "Benutzerdaten auslesen", mysql-querys gemacht.

    Diese mysql-querys sollen über die Funktionen in der mysql-klasse gemacht werden, ist ja klar.

    Jetzt ist meine Frage, wie wird das sauber in einer sauber Struktur umgesetzt. Wie macht ihr das?

    Ich habe es bis jetzt so gemacht, dass "user" und "daten" einer vererbung von "mysql" sind. also:
    PHP-Code:
    class user extends mysql 
    dann stehen mir in der "user" und "data" klasse die mysql-funktionen mit der erstellten verbindung zur verfügung!

    allerdings les und höre ich oft das es unsauber ist. Allerdings denk ich auch an die performance, und will mit einer mysql-verbindung pro seitenaufruf arbeiten.

    Damit eine mysql verbindung nach einer vererbung durch die user-klasse zum beispiel nicht doppelt hergestellt wird, speichere ich immer die verbindung in einer static variable. denn durch ein parent::__construct(); im construct in der user-klasse kann ich auf die funtkionen der mysql-klasse zu greifen und diese verwenden.

    Ideen für eine saubere umsetzung? danke!
    Zuletzt geändert von TriphunEM; 13.04.2010, 09:20.

  • #2
    Hallo,

    ich finde das auch unsauber. Ob du dich auf eine Verbindung pro Anfrage beschränken willst, kannst du jetzt noch nicht wissen, was ist, wenn du mal Daten über verschiedene Verbindungen zusammenbringen musst?

    Weder static noch Singleton ist für mich in diesem Zusammenhang sinnvoll. Wenn dein Skript nur eine Verbindung haben soll, erzeugst du halt nur eine Instanz, die du dann den anderen Klassen z. B. als Konstruktorparameter zur Verfügung stellst.

    Solche Fragen und Diskussionen hatten wir hier schon öfters, Google sollte zu folgenden Stichworten was ausspucken:
    • datenbank static singleton sitehp-resource.de
    • mvc verbindung sitehp-resource.de


    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      PHP Dependency Injection

      Kommentar


      • #4
        OffTopic:
        Ach h3ll, dieses Stichwort hatte ich extra für combie aufgehoben.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          @Amica

          Also meinst du es so, wie du es oben meintest, mit der übergabe der instanz der mysql-klasse, an die anderen Klassen???
          Hab das grad mal so zusammen geschustert! Mal sehen wie es sich mit der MySQL-Verbindung verhält, wenn ich die Instanz der MySQL-Klasse in einer Session speicher. Siehe mein anderes Thema!

          PHP-Code:
          <?php
          /**
           * MySQL-Klasse
           */
          class mysql {
              
              protected 
          $objConnection null;
              
              function 
          __construct() {
                  
          $this->mysql_connect();
              }
              
              protected function 
          mysql_connect() {
                  if (
          is_null($this->objConnection)) {
                      if (!
          $this->objConnection mysql_connect('localhost','root','')) {
                          return 
          false;
                      }
                      if (!
          mysql_select_db('users')) {
                          return 
          false;
                      }
                  }
                  return 
          true;
              }

              public function 
          mysql_select($strCommand) {
                  if (!
          $this->objConnection) {
                      return 
          false;  
                  }
                  
          $arrReturn = array();
                  
          $objResult mysql_query($strCommand$this->objConnection);
                  if (!
          $objResult) {
                      return 
          false;
                  }
                  while (
          $arrData mysql_fetch_assoc($objResult)) {
                      
          $arrReturn[] = $arrData;
                  }        
                  return 
          $arrReturn;
              }
                    


          /**
           * Benutzer-Klasse
           */
          class user {
              
              protected 
          $objMySQL null;
              
              function 
          __construct($objMySQL) {
                  
          $this->objMySQL $objMySQL;
              }   
              
              public function 
          user_getAll() {
                  return 
          $this->objMySQL->mysql_select('SELECT * FROM users');    
              }
                        


          $mysql = new mysql();
          $user  = new user($mysql);

          print_r($user->user_getAll());

          ?>

          Kommentar


          • #6
            Ja, so meinte ich es. Nur würde ich gleich PDO benutzen.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Ok, ja werde ich auch gleich mit PDO machen. Bin ich flexibler!

              Sind die Persistente Verbindungen zu empfehlen. Denn ich habe oft 100 Besucher gleichzeitig auf der Seite und da die Seite auf Ajax-Basis laufen soll, kein es eben passieren das mit einem Aufruf pro User mehrere Verbindungen hergestellt werden müssen, weil mehrere PHP-Dateien via Ajax geladen werden müssen. Ich achte diesmal eben sehr auf die Performance!

              Danke erstmal für Tipp wie ich es am besten mach könnte.

              Kommentar


              • #8
                Mal sehen wie es sich mit der MySQL-Verbindung verhält, wenn ich die Instanz der MySQL-Klasse in einer Session speicher.
                Wenn du das Handbuch gelesen hättest, dann wüsstest du das normale Verbindungen am Ende das Scriptes abgebaut werden. Und dass man P-Connections nicht verwenden sollte.

                Also eine doofe Idee.

                Ach h3ll, dieses Stichwort hatte ich extra für combie aufgehoben.
                Danke!
                Aber jetzt weiß ich kaum noch, was ich sonst schlaues dazu sagen soll.....
                Achja, das geht noch: Schau dir mal das "Doctrine ORM" an..
                Wir werden alle sterben

                Kommentar


                • #9
                  @TriphunEM

                  an deiner Stelle würde ich noch mit Exceptions arbeiten. Ist flexibler.

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

                  Kommentar

                  Lädt...
                  X