Wie Klasse aufbauen, wenn DB-Zugriff nötig?

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

  • Wie Klasse aufbauen, wenn DB-Zugriff nötig?

    Hallo!

    Ich hätte da mal eine eher allgemeine Frage. Und zwar müssen demnächst einige Klassen entwickelt werden. Die Daten der Klasse kommen aber aus diversen Datenbanktabellen.

    Jetzt stellt sich mir folgende Frage, wie ich den Zugang zur Datenbank am besten unterbringe. Ganz simpel wäre die Initialisierung eines Objektes ja mit:

    Code:
    $obj = new Object($productnumber);
    Das würde aber dazu führen, dass ich in der Klasse "Object" nochmals meine Datenbankklasse laden müsste, um die Daten auszulesen. Dabei habe ich die Verbindung zur Datenbank ja schon in der index.php aufgebaut.

    Anders sähe das hier aus, wenn ich die Daten vorher auslesen und das Objekt dann folgendermaßen initialisiere:

    Code:
    $obj = new Object($productnumber, $title, $description, ...);
    Das kann bei vielen Daten die zu speichern wären aber unübersichtlich werden.

    Wie macht man das denn im Allgemeinen so, wenn man das sauber im OOP-Stil beibehalten möchte? Die Datenbankverbindung in einer $GLOBALS Variable zu speichern ginge ja vielleicht auch, aber ist das der Weisheit letzter Schluß?

  • #2
    $GLOBALS Variable zu speichern ginge ja vielleicht auch, aber ist das der Weisheit letzter Schluß?
    Mmm.. mit PHP4 wohl leider ja....
    mit PHP5 läßt sich das schön mit Singleton's abhandeln.
    Zuletzt geändert von combie; 23.05.2006, 14:42.
    Wir werden alle sterben

    Kommentar


    • #3
      Ups, vielleicht hätte ich erwähnen sollen, dass das alles in PHP5 entstehen soll (zumindestens poche ich darauf...)

      Kannst Du mir da vielleicht ein Tutorial/Erklärungsseite/Beispiel nennen?

      Kommentar


      • #4
        Dabei habe ich die Verbindung zur Datenbank ja schon in der index.php aufgebaut.
        Dann lass doch das Hauptscript all diese Daten in ein Array schreiben z.B. mit Key productnumber und als Elemente die jeweiligen Eigenschaften. Dann kannst du das Objekt easy mit productnumber initialisieren und die Klasse weiss woher und welche Daten sie einlesen soll.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          z.B. singleton
          und: http://de2.php.net/manual/de/language.oop5.patterns.php
          Zuletzt geändert von combie; 23.05.2006, 14:48.
          Wir werden alle sterben

          Kommentar


          • #6
            Ich hab dies kleine Tutorial gefunden, das dürfte dem doch ziemlich nahe kommen was ich suche, oder?
            http://www.gerd-riesselmann.net/arch...design-pattern

            Nur das es hier ein "Factory Pattern" ist und kein Singleton.

            Kommentar


            • #7
              Stammt leider aus der PHP4 Zeit...

              Aber trotzdem, könnte schon passen!
              Jetzt noch beide Konzepte miteinander verschmelzen, dann bekommst du
              eine saubere OOP Lösung hin.
              Wir werden alle sterben

              Kommentar


              • #8
                Ich hab jetzt mal ein wenig rumprobiert und das ist wirklich eine schöne Methode. Eine Frage habe ich aber noch:

                Alle Beispiele (die natürlich nur reine Datenbankklassen waren... *grummel*) haben die Grundklasse "Datenbank" (Beispiel). Bei allen weiteren heißt es dann:
                Code:
                class Klassenname extends Datenbank
                Muss man das wirklich so machen, ich meine mit dem "extends"? Meine Klasse für Produkte hat doch eigentlich nichts mit der Datenbankklasse zu tun, sie braucht nur ein Objekt daraus.

                Kommentar


                • #9
                  Original geschrieben von Carsten Henkelmann
                  Muss man das wirklich so machen, ich meine mit dem "extends"? Meine Klasse für Produkte hat doch eigentlich nichts mit der Datenbankklasse zu tun, sie braucht nur ein Objekt daraus.
                  Nein, das wäre ziemlicher Unfug.


                  Was gefiel dir denn am erwähnten Singleton-Pattern nicht?
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Original geschrieben von wahsaga
                    Nein, das wäre ziemlicher Unfug.
                    Dachte ich mir doch. Wie müsste ich denn die Datenbank-Singleton-Klasse in meine Produktklasse einbinden, damit ich an das Datenbank-Objekt komme?

                    Original geschrieben von wahsaga
                    Was gefiel dir denn am erwähnten Singleton-Pattern nicht?
                    ??? Wieso, ich schrieb doch, dass das eine schöne Methode ist!?

                    Kommentar


                    • #11
                      Was ist denn am Beispiel im PHP-Manual unverständlich?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Weil das nur eine Klasse als Beispiel gibt, aber kein Beispiel wie zwei grundverschiedene Klassen miteinander arbeiten.

                        Angenommen ich habe folgende Datenbankklasse:
                        PHP-Code:
                        class Datenbank
                        {
                            static function 
                        getInstance() { ... }
                            private function 
                        __construct() { ... }

                            ...

                        Dann meine normale index.php:

                        PHP-Code:
                        ...
                        require 
                        'Datenbank.php';
                        $db Datenbank::getInstance();
                        ... 
                        Dann meine Produktklasse:

                        PHP-Code:
                        class Produkt
                        {
                            function 
                        __construct()
                            {
                                
                        $db Datenbank::getInstance();
                                
                        $db->Query(...);

                                ...
                            }

                        Meine Frage ist jetzt: wie bekommt meine Klasse "Produkt" das Objekt "Datenbank"? Muss ich da im __construct noch einen require auf die Datenbankklasse machen? Oder ist die bereits global bekannt durch das Einbinden in der index.php?

                        Kommentar


                        • #13
                          Ja das sollte reichen!
                          Setze doch mal an den Anfang aller betreffenden HauptScripte
                          (nicht die IncludeScripte)
                          PHP-Code:
                          error_reporting(E_ALL); 
                          Und probiere es aus
                          Wir werden alle sterben

                          Kommentar


                          • #14
                            Yup, funzt.

                            PHP5 scheint das doch ein wenig anders handzuhaben als PHP4. Danke an alle für die Tips!

                            Kommentar

                            Lädt...
                            X