Announcement

Collapse
No announcement yet.

Referenz $this an class-member ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Referenz $this an class-member ?

    Hallo an alle,

    ich habe eine mySql-Klasse die Abfragen bearbeitet
    und möchte diese mit weiteren Klassen erweitern.
    Eine für Tabellen sowie eine für die einzelnen Felder
    der Tabelle.

    die DB-Klasse soll dann ein Array mit
    Tabellen-Objekten enthalten, die Tabellen-Objekte ein
    Array mit Feld-Objekten.

    Hier jetzt die Frage:
    Wenn ich ein Tabellen-Objekt erzeuge sind ja weitere
    Abfragen notwendig. Dafür würde ich natürlich gerne
    die Funktionalität der DB-Klasse nutzen.
    Führt ein Aufruf wie $this->tab[] = new tabelle(&
    $this) zu Rekursion? Kann ich die Referenz im
    Tabellenobjekt weitergeben an ein Feld-Objekt um auch
    dort die notwendigen Abfragen auszuführen?

  • #2
    Wenn ich jetzt richtig verstanden habe, was dein Code machen soll, dann führt das generell nciht zu einer Rekursion, das ist allerdings ohne Code zu sehen, schwer abzuschätzen..

    Comment


    • #3
      Hallo Xafford,

      hier mal eine verkürzte Version "Code"-Version

      <pre>
      class db
      {
      var $aResult = array();
      var $iConnID;
      var $strHost;
      var $strUser;
      var $strPass;
      var $strDb;
      var $bDebug = FALSE; // if set TRUE, mySql-Errors
      are displayed
      var $aTabellen = Array();


      function swemc ($incFile = "db.inc.php")
      {


      require_once($incFile);
      ....
      setzt Variablen und baut Verbindung auf

      // hier jetzt so angedacht:
      // Tabellennamen einlesen
      // für jede Tabelle ein Objekt anlegen
      for ($i=0; $i < anz_tab; $i++ )
      {
      $aTabellen = new tabelle(&$htis,$tabellenname)
      }
      }

      function query($querystring)
      {
      führt Anfragen aus,
      }

      class tabelle
      {
      // Variablen
      /..
      function tabelle( $db_objekt,$tabellenname)
      {
      und hier dann mit den Variablen/Funktionen von
      $db_objekt arbeiten
      z.b.
      $aFelder =
      mysql_list_fields($db_objekt->strDB,$tabellenname,
      $db->iConnID);

      }
      }

      Comment


      • #4
        Nein, dieser Code erzeugt keine Rekursion, allerdings finde ich ihn etwas umständlich.
        Wenn Du in deiner Klasse "tabelle" nur die Connection brauchst, dann würde ich auch nur die übergeben, also &$this->iConnID, wenn Du eh nicht vererbst, ansonsten referenzierst Du immer das ganze Objekt unnötigerweise.<br />
        Willst Du die Objekte logisch verknüofen, dann würde ich an deiner Stelle über Vererbung nachdenken, dann sparst Du Dir grundsätzlich die Verknüpfung und mußt auch nicht ür jede Tabelle (und später auch Feld) ein neues Objekt anlegen, was mehr Speicher kostet.<br /><br />
        Btw is tmir gerade noch ein Fehler aufgefallen in der Klasse "tabelle":<br />
        mysql_list_fields($db_objekt->strDB,$tabellenname,
        $db<font style="color:#ff0000">_objekt<font>->iConnID);<br /&gt

        Comment


        • #5
          Hallo Xafford,

          ich werds mal mit der zusätzlichen Übergabe der
          Verbindungskennung angehen. Es werden noch ein paar
          weitere Daten benötigt, dafür hab ich schon die
          Lösung.

          Über Vererbung hab ich auch mal nachgedacht, es wäre
          aber doch eine Vererbung "von oben nach unten". Wenn
          eine Klasse Feld von einer Klasse Tabelle und die
          wieder von einer Klasse DB abstammt.

          Ich dachte es wäre ein brauchbarer Ansatz die Klasse
          DB um Objekte für Tabelle und die Klasse Tabellen um
          Objekte für Felder zu erweitern.

          Frage Speicherbedarf:
          Die Klasse Feld zb. stellt ja dann die Informationen
          über ein Tabellenfeld ( Typ, Länge, Flags,
          Default-Werte ... ) zur Verfügung. Die müsste ich
          dann ja in Arrays statt im Objekt speichern. Wird in
          Arrays bestimmt schnell unübersichtlich und braucht
          ja auch Speicherplatz

          Comment


          • #6
            Erst mal noch ein Nachtrag: Daß der Code oben keine Rekursion erzeugt stimmt übrigens nur so lange, bis Du in "tabelle" eine Eigenschaft anlegst, der Du das übergebene &$this zuweoist, also das auf keinen Fall machen.<br />
            Was die Vererbung von obennach unten angeht, so ist es nichts schlimmes. Wie Du selbst sagst erweiters Du ja die Klasse DB und die Klasse Tabelle kann ohne die Klasse DB ohnehin nicht existieren, insofern fände ich Vererbung sinnvoller, aber da mag man nderer meinung sein.<br />
            Was "Feld" angeht, so wirst Du wohl um ein Array wirklich nicht umhin kommen

            Comment

            Working...
            X