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

  • Jens P.
    hat ein Thema erstellt [Erledigt] OOP Datenbankzugriffe.

    [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.

  • Paul.Schramenko
    antwortet
    Das ist auch eine gute Möglichkeit das ganze zu lösen, damit sind alle Abhängigkeiten nicht mehr in der Klasse, sondern beim Erzeugen der Objekte

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Eine gute Alternative wäre vielleicht, wenigstens Registry oder Singleton wo möglich mit dem Konstruktorprinzip zu verbinden.
    Also statt

    PHP-Code:
    class myClass
      
    {
      function 
    __construct ()
        {
        
    $this->db Registry::get ('globalDB'); // Abhängigkeit
        
    }

      function 
    myFunc ()
        {
        
    $this->db->query (..);
        return (
    $this->db->getResults ());
        }
      }

    $myObject = new myClass;
    $myObject->myFunc (); 
    das hier:
    PHP-Code:
    class myClass
      
    {
      function 
    __construct (myDatabase $db)
        {
        
    $this->db $db;
        }

      function 
    myFunc ()
        {
        
    $this->db->query (..);
        return (
    $this->db->getResults ());
        }
      }

    $myObject = new myClass (Registry::get ('globalDB'));  // Abhängigkeit außen!
    $myObject->myFunc ();

    // oder halt
    $myObject = new myClass (myDatabase::getInstance ()); // Singleton-Typ
    $myObject->myFunc (); 
    Auch wenn das Gesamtszenario trotzdem noch globale Ressourcen verwendet und damit schwer wartbar bleibt, ist wenigstens myClass in sich testbar, indem man bspw. eine Dummy-DB (Mock) übergibt. Abhängigkeiten so weit außen wie möglich gestalten!

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    Im Prinzip kann kann man dann so eine statische Klasse (eine Klasse, die eben nur statische Mehtoden und Konstanten hat), auch als ein globales Datenarray ansehen, denn im Prinzip ist das nichts anderes...
    Ist halt reine Geschmackssache finde ich, ob man es nutzen möchte oder nicht!

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Du kannst drauf zugreifen weil die Methoden get/set statisch sind. Somit kannst du von überall diese Methoden der Klasse aufrufen. Da alles was in der Registry passiert eben statisch ist, kann man so verschiedene Objekte eben an allen Orten im Projekt wieder aufrufen.

    Dazu mal wieder: Siehe Manual PHP: Static Keyword - Manual

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Und selbst wenn man kein FW einsetzt, muss man ja nicht immer alles komplett neu machen.Sprichwort Refactoring...


    Man kann ja Teil für Teil ändern.
    Zu meinen Programmieranfängen hab ich mir auch immer wieder gedacht, "neu aufbauen ist sicher schneller, mach dann weniger Fehler, hab ja dazugelernt.." aber dem ist meißt nicht so...

    Vorallem wenn man alleine / zu zweit ist, ist refactoring IMHO besser,....

    UNd ich versteh noch immer nicht, was gegen meine Möglichkeit spricht, bevor man sich nun AUCH NOCH mit Registry Pattern auseinand setzen muss. Hab ich selten gebraucht und versuche mir auch keine Gedanken drüber zu machen.... Vorallem wenn man noch nicht so fit ist(was Jens ja nicht ist), kann man sich das ja für später aufheben, sonst wird das nie was mit dem CMS und man fängt immer und immer wieder von vorne an und wie er selbst schreibt: es wird nur noch verwirrender

    Zitat von Jens P. Beitrag anzeigen
    Dann muss ich ganz am Anfang in der Index etaws in die Registry schrieben wie z.B.:

    PHP-Code:
    $db = new mysqli($user$host$pass$db);
    Registry::set('db'$db); 
    und dann kann ich darauf überall zugreifen. Nur ich verstehe nicht, wieso ich überall darauf zugreifen kann. Wieso? Ich stehe sowas von auf dem Schlauch!


    Dazu passend: Inversion of Control | PHP hates me - Der PHP Blog

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Dann muss ich ganz am Anfang in der Index etaws in die Registry schrieben wie z.B.:

    PHP-Code:
    $db = new mysqli($user$host$pass$db);
    Registry::set('db'$db); 
    und dann kann ich darauf überall zugreifen. Nur ich verstehe nicht, wieso ich überall darauf zugreifen kann. Wieso? Ich stehe sowas von auf dem Schlauch!

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Zitat von Jens P. Beitrag anzeigen
    Würde auch deine nehmen, würde aber auch gerne den Link haben. Am liebsten beides Ich lösche glaube ich nochmal mein komplettes CMS. Muss nochmal von neu Anfangen. Habe viele kleine Fehler gemacht.
    Und das wird dir immer und immer wieder passieren ... und genau aus diesem Grund setze ich auf Frameworks, die haben sich entsprechend viele Gedanken gemacht die auch Kleinigkeiten richtig umgesetzt haben

    Einen Kommentar schreiben:


  • dennis81
    antwortet
    php registry - Google-Suche

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Würde auch deine nehmen, würde aber auch gerne den Link haben. Am liebsten beides Ich lösche glaube ich nochmal mein komplettes CMS. Muss nochmal von neu Anfangen. Habe viele kleine Fehler gemacht.

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    Ich suche gleich ma nen Link raus, wo du dir sowas mal anschauen kannst. kannst aber auch meine haben wenn de magst, ist ja schließlich kein Hexenwerk...

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von Paul.Schramenko Beitrag anzeigen
    Dann machs einfach in der index.php.
    Weißt du wie so eine Registry-Klasse aussieht?
    Nein, das war meine Frage in dem vorherigen Post. Danke im vor raus!

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    Dann machs einfach in der index.php.
    Weißt du wie so eine Registry-Klasse aussieht?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:


  • chorn
    antwortet
    @Jens

    Dein Problem kann man auch über das Singleton-Pattern lösen.

    Einen Kommentar schreiben:

Lädt...
X