OOP...

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

  • OOP...

    Tach,

    Ich hab hier eine db_mysql.inc.php Class (PHPLIB-Style), die bekanntermaßen so initialisiert wird:

    include('db_mysql.inc.php');
    $db = new db_local;

    Nun bin ich gerade am Erstellen einer Class für Private Messaging (messaging.inc.php). Das ganze sieht in etwa so aus (wer hätt's gedacht *g*):

    class private_messaging
    {
    function private_messaging { //constructor
    //blub
    }
    }

    Soweit alles klar - Doch wie benutze ich nun ein Objekt der db_local in dieser Class? Einfach

    //[...]
    var $db;
    //[...]
    $this->db = new db_local;
    //[...]

    ?
    Wenn ja, greife ich dann einfach auf eine DB-Funktion (z.B. Query) mit

    $this->db->query();

    zu? Das sieht recht seltsam aus...

    Did I miss the point?

    CAT Music Files

  • #2
    hm.. *denk*... oder auch oop-mäßig ein

    "class private_messaging extends db_local" ?

    EDIT: Überlegung - und was wäre, wenn ich in private_messaging mehr als eine andere class bräuchte...?
    Das erweist sich ja als richtiger Braintwister... hmmm...

    [Editiert von Sky am 06-11-2001 um 22:07]

    CAT Music Files

    Kommentar


    • #3
      *bettel* niemand hier, der das weiß?

      CAT Music Files

      Kommentar


      • #4
        ok also einmal noch nach oben, dann geb ichs auf...

        CAT Music Files

        Kommentar


        • #5
          Ich bin mir jetzt nicht ganz sicher, ob ich zu einer Lösung beitragen kann, weil ich mit OOP in PHP noch nicht allzu viele Erfahrung hatte.
          Wenn ich dein Problem richtig verstehe, möchtest du deine Klasse um mehr als eine andere "extenden". Soweit ich weiß (man möge mich korrigieren falls ich hier irre) kann man eine Class in PHP nur um eine einzige weitere Class extenden (also darauf aufbauen).

          Ich bin aber vor kurzem beim Herumsurfen auf sourceforge.net auf eine PHP Class gestoßen, die genau das macht (Zitat):
          "SmartExtender is a Class that takes an unlimited number of base classes and compiles it into one class."

          Hab leider das Projekt auf sourceforge nicht mehr gefunden - ich hab aber den Code auf meinem Puter gespeichert. Falls dich das weiterbringt und du interessiert bist, kann ich dir die Dateien gerne mailen.

          hth
          smeagol

          Kommentar


          • #6
            Danke für das Angebot smeagol, doch ich hab das ganze nun bereits mit normalen Functions gelöst - ist zwar weniegr elegant, erfüllt aber seinen Zweck.

            Vielen Dank auf jeden Fall für deine Antwort!

            CAT Music Files

            Kommentar


            • #7
              Du solltest doch eigentlich in deiner neuen Klasse einfach ein Objekt der db-Klasse instanzieren können, also eher mit
              $db= new db_local;
              und dann das Objekt in deiner message-Klasse benutzen. Du brauchst doch eigentlich nicht das gesamte Objekt in deine neue Klasse einbinden, oder?

              Kommentar


              • #8
                Andererseits kannst du natürlich, falls du wirklich das Objekt in deine Klasse integrieren willst, den Weg wie du ihn zu allererst beschrieben hast gehen, d.h. die Referenzierung würde dann als Beispiel
                $this->db->query(blabla);
                aussehen. War schon richtig.

                Kommentar


                • #9
                  Hallo!
                  Hab gelesen du hast es funktional gelöst, aber wollte hier das trotzdem noch anfügen:

                  wenn ich das richtig interpretiere, stellt die db_local Klasse Methoden zur verfügung, welche du in der Klasse private_messaging verwenden willst.
                  z.b. Methode connect();
                  Zum einen kannst du richtigerweise diese Methoden verwenden:

                  klasse db_local:

                  <?
                  class db_local {
                  function connect ($name) {
                  $this->db_name = $name;
                  }
                  }
                  ?>

                  klasse p_m.php

                  <?
                  include('db_local.php');

                  class private_messaging {
                  function message ($db, $name) {
                  $this->$db = new db_local; // Erzeuge db_local Objekt
                  $this->$db->connect ($db); // Methodenaufruf des db_local Objektes
                  print "connected to...".$this->$db->db_name; // JA, sieht komisch aus, IS aber so ;-)
                  // Sieht nur so aus wegen dem impliziten this
                  print " message: ".$name;
                  }
                  }
                  // private_messaging Objekte anlegen
                  $message = new private_messaging;
                  $message->message("localhost", "hallo");
                  ?>

                  => ergibt output:
                  connected to...localhost message: hallo

                  class private_messaging extends db_local [...]

                  benötigst du nur, wenn du die Methoden vererben willst sprich:

                  <?
                  include('db_local.php');

                  class private_messaging extends db_local{
                  var $besitzer;
                  function message ($db, $name) {

                  $this->$db = new db_local; // Erzeuge db_local Objekt
                  $this->$db->connect ($db); // Methodenaufruf des db_local
                  print "connected to...".$this->$db->db_name;
                  print " message: ".$name;
                  }
                  }
                  $message = new private_messaging;
                  $message->message("localhost","hallo");
                  $message->connect("localhost"); // vererbte Methode
                  print " (inherited method)connected to: ".$message->db_name;
                  ?>

                  => ergibt output:
                  connected to...localhost message: hallo (inherited method
                  connected to: localhost

                  wie du siehst, lagst du verdammt richtig
                  Manchmal muss ned alles was suspekt aussieht, falsch sein

                  Nur: PHP ist keine richtige OO Sprache, darum geh auch Mehrfache Vererbung nicht

                  z.B.: class private_messaging extends db_local, db_remote { [...]

                  Alle Klarheiten beseitigt?
                  Hoffe trotzdem noch ein bißchen geholfen zu haben. Grüsse


                  FreeBSD - Unleash the daemon inside your PC

                  Kommentar


                  • #10
                    Hey, das war nett von dir - danke!

                    CAT Music Files

                    Kommentar

                    Lädt...
                    X