Datenbankzugriff OOP

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

  • Datenbankzugriff OOP

    Hallo zusammen,
    ich habe ein Verständnisproblem in Bezug auf die Objektorientierte Programmierung.

    Wenn ich die Verbindung zur Datenbank aufbaue sollte es doch wie folgt aussehen (aus dem Buch PHP 5 und MySQL 5):

    PHP-Code:
    // -- Verbindung zur Datenbank aufbauen
      
    class DbConnect {
                  protected 
    $mysqli;
                  
    // Konstruktor (Objekt dieser Klass erzeugen)
                  
    function __construct(){
                              require_once(
    '_privat/libery.inc.php');
                              
    $this->mysqli = @new mysqli($mysqlhost,$mysqluser,$mysqlpasswd,$mysqldb);
                              
                              
    // test der Verbindung
                              
    if(mysqli_connect_errno()){
                                         
    printf("<p>Fehler: Keine Datenbankverbindung</p>"mysqli_connect_error());
                                         
    $this->mysqli FALSE;
                                         exit();
                              }
                  }
                  
                  
    // Destruktor (Objekt löschen)
                  
    function __destruct() {
                              
    this->close();
                  }
                  
                  
    // Verbindung/Objekt explizit löschen
                  
    function close(){
                              if(
    $this->mysqli){
                                         
    $this->mysqli->close();
                                         
    $this->mysqli FALSE;
                              }
                  }
      } 
    Nun möchte ich beispielsweise für ein datenbankbasiertes Gästebuch die INSERT-, UPDATE- und DELETE-Anweisungen in einer separaten Datei gaestebuch.php in einer eigenen Klasse unterbringen. Wie nutze ich dann die oben gezeigte Datenbankverbindung?

    Ich würde mich sehr freuen, wenn Ihr mir da weiter helfen könnt.

  • #2
    z.B.
    PHP-Code:
    $gb = new GaesteBuchModel($dbverbindung); 
    Könnte für dich von interesse sein:
    Registry Design Pattern
    Dependency Injection Design Pattern
    Singleton Design Pattern(weniger schön)
    Zuletzt geändert von combie; 04.06.2009, 13:48.
    Wir werden alle sterben

    Kommentar


    • #3
      Hallo combie,
      vielen Dank für die schnelle Antwort. Ich denke, es ist sinnvoll die Datenbank-Klasse als Singleton Pattern anzulegen da so nur eine Instanz einer Klasse erzeugt wird. Leider habe ich aber noch keine gutes Tutorial gefunden.

      Schön wäre es ja, wenn da noch jemand eine gute und leicht verständliche Einstiegslektüre kennt ;-)

      Kommentar


      • #4
        Zitat von Fenja Beitrag anzeigen
        Ich denke, es ist sinnvoll die Datenbank-Klasse als Singleton Pattern anzulegen da so nur eine Instanz einer Klasse erzeugt wird.
        Und was ist, wenn du mal zwei Datenbankverbindungen brauchst?

        Kommentar


        • #5
          [FONT=Arial]2 Datenbanken? Aber ich kann doch für ein System mit Beispielsweise Gästebuch, Forum, Benutzerverwaltung, etc. beliebig viele Tabellen anlegen. Wann braucht man denn 2 Datenbanken?[/FONT]

          Kommentar


          • #6
            Zitat von Fenja Beitrag anzeigen
            [FONT=Arial]2 Datenbanken? Aber ich kann doch für ein System mit Beispielsweise Gästebuch, Forum, Benutzerverwaltung, etc. beliebig viele Tabellen anlegen. Wann braucht man denn 2 Datenbanken?[/FONT]
            Aber wenn du eine zweite Datenbankverbindung einmal brauchen würdest, was machst du dann?

            Kommentar


            • #7
              Wie Du sicher an meiner Antwort erkannt hast, darüber habe ich mir keine Gedanken gemacht. Ich kann mir nicht vorstellen, dass ich das je brauche...

              Da Du diese Frage stellst, kennst Du Anwendungsfälle für die ich 2 Datenbanken benötige? Und weiterhin kennst Du eine bessere Lösung? Ich habe ja gelesen, das Singleton Design Pattern weniger schön ist, aber warum?

              Kommentar


              • #8
                Es is ein "platter" Ersatz für globale Variablen und bietet nur wenig Mehrwert.
                Wir werden alle sterben

                Kommentar


                • #9
                  Hallo Fenja,

                  da du auch nach Einstiegslektüre fragst: ich habe mir vor einige Zeit PHP Design Pattern besorgt - ist zwar nicht gerade preiswert, beschreibt den Einsatz von Entwurfsmustern mit PHP aber recht gut (meine Meinung).

                  Damit habe ich schnell verstanden wofür die gängigen Entwurfsmuster gut sind. Letztlich habe ich mich dann aber doch entschieden nicht alles selbst zu basteln sondern das Zend_Framework zu nutzten. Hier gibt es eigentlich alles was für eine typische Anwendung benötigt wird - auch eine Datenbankverbindung.

                  Kommentar


                  • #10
                    Kannst auch einfach in deiner Gästebuch Klasse die DB Connect Klasse erben und im Constructor ebenfalls den parent Constructor ausführen. MySQLi sorgt ja dafür, dass bei mehrmalige verwendung der DB Connect Klasse keine mehrfach Verbindung zur DB passiert.

                    Kommentar


                    • #11
                      Also über das Buch habe ich auch schon nachgedacht. Mir ist es generell einfach wichtig, wenn ich etwas programmiere dies so übersichtlich und strukturiert wie möglich zu machen.
                      Das Framwork ist sicher eine gute Sache, aber zunächst geht es mir darum, das Programmieren an sich zu beherrschen. Da die Basis größerer Anwendungen nun mal die Datenbankverbindung ist, wollte ich hier ansetzen. Leider gibt es ja bekanntlich viele Wege nach Rom, aber ich würde gern den sichersten, schnellsten und übersichtlichsten gehen.

                      Ich werde mir das Buch mal genauer ansehen und ein wenig mit den Möglichkeiten experimentieren. Sollten weitere Fragen auftauchen, werde ich mich hier noch ein mal melden.

                      Kommentar

                      Lädt...
                      X