Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] OOP Datenbankzugriffe

Einklappen

Neue Werbung 2019

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

  • [Erledigt] OOP Datenbankzugriffe

    Hallo zusammen,
    es tut mir Leid, habe jedoch Probleme mit den Datenbankzugriffen etc.

    Wie veranstaltet Ihr das, dass Ihr überall in jeder Klasse zu jeder Zeit ein Datenbankzugriff habt? Ich gebe im Konstruktor immer ein Input mit ($test = new mysli(...)). Sehe das als sehr sehr schlecht Lösung. Wie macht Ihr das? Bin ratlos.


  • #2
    Hatten wir das nicht schon zig Mal?

    Ich übergebe die DB Verbindung im Konstruktor mit.
    Man kann sie auch per setter zB übergeben..
    PHP-Code:
        public function  __construct(vB_Registry $vbulletinvB_Database $osdb null)
        {
            
    $this->registry $vbulletin;
            if (
    $osdb == null)
            {
                
    $this->osdb $this->registry->db;
            }
            else
            {
                
    $this->osdb $osdb;
            }
        }

    protected function 
    andereMethode()
    {
     
    $articles $this->odb->query($query);
            while (
    $article $this->odb->fetch_array($articles) )
            {
                        
    $this->queryresult["$article[products_id]"] = $article[];
            }
    ..
    }


    $db = new MySQLi(..);
    $foo = new asdfghclass($vb$db); 
    Und nun kann ich über $this->osdb auf die DB zugreifen

    Kommentar


    • #3
      Ja wir hatten es schon Zig mal. Tut mir ja Leid!

      Also übergibst du Sie auch im Konstruktor. Closed Ihr auch immer im Destruktor die Verbindung?

      Kommentar


      • #4
        Ich arbeite mit einer Registry-Klasse. Ja ich weiß böse... blalbla, weil es im endeffekt nichts anderes ist wie ein globale Variable, aber ich mag Registry-Klassen...
        "My software never has bugs, it just develops random features."
        "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

        Kommentar


        • #5
          Du erstellst offenbar in jedem Konstruktor eine neue?!
          Das würde ich auf keinen Fall machen

          Kommentar


          • #6
            Sagen wir so, in der Index habe ich eine Variable:

            PHP-Code:
            $x = new mysqli(hostnamepwdtab); 
            wenn ich aus der index eine neue instanz einer klasse haben möchte mache ich das so:

            PHP-Code:
            $x = new mysqli(hostnamepwdtab);

            $neu = new register($x); 

            Kommentar


            • #7
              darf man mal fragen was das machen soll?

              Code:
              $neu = new register($x); 
              "My software never has bugs, it just develops random features."
              "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

              Kommentar


              • #8
                Du kannst doch überall $x verwenden, wozu noch eine 2 Instanz?

                Kommentar


                • #9
                  Zitat von ragtek Beitrag anzeigen
                  Du kannst doch überall $x verwenden, wozu noch eine 2 Instanz?
                  Du sagst mir das ich dann auch ohne wie unten beschrieben mit $x auf query() etc. drauf zugreifen kann? Geht bei mir nicht.

                  Zitat von Paul.Schramenko Beitrag anzeigen
                  darf man mal fragen was das machen soll?

                  Code:
                  $neu = new register($x); 
                  $x wird dann im Konstruktor der Klasse Register die Daten in eine Property einspeichern, damit ich in der ganzen Klasse zugriff drauf habe.

                  Kommentar


                  • #10
                    Wie ist denn dein Script aufgebaut? Wirst du immer auf die index.php weitergeleitet und includierst dann die bootstrap.php?
                    Naja wenn ja, würde ich einfach diese eine Registry-Klasse benutzen. In der bootstrap initialisierst du die DB und schiebst diese dann in die Registry.
                    Und dann kannst du in ganzen Script auf dieses Db-Objekt zugreifen.
                    Sowas in der Art:

                    boostrap.php
                    PHP-Code:
                    #...
                    $db = new Db($user$host$pass$db);
                    Registry::set('db'$db); 
                    Deine Klasse dies braucht:
                    PHP-Code:
                    class {
                        
                    #...
                        
                    public function test() {
                            
                    $db Registry::get('db');
                            
                    #...
                        
                    }

                    "My software never has bugs, it just develops random features."
                    "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                    Kommentar


                    • #11
                      Das mit der Registry finde ich Klasse nur wie mache ich das mit der Registry? Wo binde ich die ein, dass ich Sie überall zu Verfügung habe? Bzw. das Sie immer darin ist? Wie muss diese aufgebaut sein?

                      Kommentar


                      • #12
                        Die Frage ist, wie sieht denn dein Script aus?
                        läuft bei dir alles über die index.php. Und die leitet dann an den entsprechenden Controller weiter, oder hast du für jede Seite eine eigene PHP-Datei.

                        Ich hab eine index.php, auf die immer per .htaccess redirected wird, dann includiere ich die bootstrap.php ein und die holt sich den richtigen Controller. Und dann kann ich in der Bootstrap einfach die Db anlegen und diese in die Registry schieben.
                        "My software never has bugs, it just develops random features."
                        "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                        Kommentar


                        • #13
                          @Jens

                          Dein Problem kann man auch über das Singleton-Pattern lösen.
                          You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

                          Kommentar


                          • #14
                            Ich habe eine Index. Anhand der Parametern in der URL starte ich dann eine andere Datei.

                            www.example.de/index.php?site=register

                            Dieser Link würde die Datei register.php öffnen, die dann auch gleichzeitig die Register.class.php initialisiert und mit der Klasse arbeitet.

                            Kommentar


                            • #15
                              Dann machs einfach in der index.php.
                              Weißt du wie so eine Registry-Klasse aussieht?
                              "My software never has bugs, it just develops random features."
                              "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                              Kommentar

                              Lädt...
                              X