OOP Denkfehler?

  • Hi Leudde,


    ich hab da ein OOP-Problem...wahrscheinlich nur ein Denkfehler den ich leier verfolgt habe.


    Also, esgeht eigentlich nur darum, eine Liste von Clips ausgeben zu lassen die in einer Datenbanktabelle gespeichert sind. An jedem Clip hängt auch ein User, naja, und ich will halt alle Daten ausgegeben haben.
    Des ganze wird per $ausgabe .= xxxxx als tabelle gespeichert und $ausgabe wird später an das Seitentemplate übergeben.


    Naja, Theorie ganz einfach, wie man es mir sagte:


    eine schleife über die gesamte Tabelle, ein Array mit dem Clipobjekt füllen, und das Clipobjekt holt sich dann aus der klasse User noch die Daten und aus der klasse kategorie. einfach solte man denken.
    Datenbankverbindung stelle ich auf der testseite über nen Include her her ( new mysqli(****))









    Tempmovies:


    PHP
    1. function __construct($_id='') {
    2. $this->id = $_id;
    3. $this->conn = new DBConn();
    4. $this->conn->db->query("SET names 'utf8'");
    5. if ($this->id!='') {
    6. $this->get();
    7. }
    8. }


    So, an der stelle wird ja nochma zur DB connectet


    dann in der get-methode:


    PHP
    1. $this->user = new User($row->user);


    So, in der User dann folgendes:


    PHP
    1. function __construct($_id='') {
    2. $this->id = $_id;
    3. $this->conn = new DBConn();
    4. $this->conn->db->query("SET names 'utf8'");
    5. if ($this->id!='') {
    6. $this->get();
    7. }
    8. }


    Wieder eine Verbindung zur DB.
    Naja, und weiter unten greige ich dann ncohma auf new Kategorie zu, dort brauch ich ja auch ne DB-Verbindung



    Also, das klappt auch alles soweit, aber ab einer bestimmten grösse der Tabelle habe ich "Too many Connections mysqli ... usw usw"
    Leuchtet mir ja auch ein, weil ich ständig an die DB geht und der destructor ja erst aufgerufen wird, wenn die klasse abgearbeitet wurde am ende.
    Aber ich brauch in den Klassen doch eine anbinung an die DB.... habs schon versucht die $dbconn mit zu übergeben an die onstructors...des geht dann auch alles, aber des kann net sinn der sache sein, oder ?


    Natürlich Include ich die DB-Class nur einmal, also da is kein fehler wegen mehrfachem include oder so.


    Wo ist da mein denkfehler ?


    Ich hoffe ich konnte das Problem gut genug beschreiben, arbeite jetzt schon seit um 7 und bin net mehr so ganz frisch im kopf, nur dieses letzte Problem lässt mich einfach net los...ich möcht das einfach nciht alles umprogrammieren müssen :(

  • PHP
    1. function __destruct() {
    2. unset($this->conn);
    3. }

    7
    Ich denk ma du meinst des ^^
    Ja des mach ich ja auch, allerdings denk ich ma das er wegen der schleife da ja so oft reingeht und echt so viele verbindungen aufbaut bevor er am destruktor angekommen is das ich "too many" hab



    @ steffenk:
    Das hört sich interesant an, da will ich ja eigentlich auch hin...eine Verbindung und die kann ich dann nutzen, daher ja die Idee mit dem durchschleifen von $dbconn, nur war mir klar das es das nets sein kann ^^


    Ich hab jetzt pauschal zum beispiel
    http://www.phppatterns.com/docs/design/singleton_pattern
    gefunden...aber wenn ich ehrlich bin werd ich da net schlau draus, 1. was es bringt, 2. wie es funktioniert und 3. wie ich des für meine dbverbindung nutzen kann, bzw wie ich sie dann aufrufe.


    Kannst mir da evtl. weiterhelfen, ne andere gute seite wo des anhand von DB erklärt wird, oder nen kleines Beispiel

  • Hi,


    über Sinn und Unsinn von Singletons lass ich mich jetzt hier nicht aus, aber im Prinzip funktioniert das so:




    Und nutzen würdest du das so:


    PHP
    1. $dbconn = DBConn::getInstance();
    2. //.... weiterer Code


    Damit greifst du immer auf die selbe Instanz der Klasse zu. Noch besser wäre natürlich, wenn DBConn von MySQLi ableitet, dann könntest du den Wrapper vermeiden ;)

    Wer sabotiert eigentlich ständig meine Signatur?

  • Vielen vilen Dank !!!


    Klappt einwandfrei.


    Ok,du hast mich allerdings auch neugierig gemacht mit "über Sinn und Unsinn von Singletons lass ich mich jetzt hier nicht aus". Das hört sich so an als ob es nicht grad die beste Möglichkeit ist.....:eek:



    Mit dem ableiten meinst du dann mysqli->DBConn****** ??