tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
1340
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sufijen sufijen ist offline Mitglied Gold
    Registriert seit
    May 2007
    Beiträge
    236
    Hallo zusammen,

    ich bin noch relativ neu in OOP und wollte fragen, wie ich es am besten 3 Klassen miteinander verbinde...

    Ich habe eine Templateklasse, eine Termineklasse(um temrine zu adden,deleten, usw) und eine Datenbankklasse.

    Ich möchte:
    1. nun mit der Termineklasse auf die Datenbankklasse zugreifen um Querys zu senden etc.
    2. mit der Terminklasse auf die Templateklasse zugreifen, um möglichst einfach den inhalt zu parsen

    Wie geht das am einfachsten bzw ist das überhaupt Sinnvoll?
    Geändert von sufijen (13.07.07 um 11:09 Uhr)
     

  2. #2
    Avatar von SnEaKy
    SnEaKy SnEaKy ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Ort
    Hattersheim
    Beiträge
    219
    Wenn ich das nun richtig verstanden habe möchtest du deiner Terminklasse die beiden Basisklassen (Templateklasse und Datenbankklasse) vererben. Richtig?

    Das ist nämlich nicht möglich. Eine Klasse kann immer nur eine Basisklasse erben.
     
    Die Welt ist binär: Entweder man ist eine Eins oder eine Null, tot oder lebendig! - Und ich? Lebe...

  3. #3
    sufijen sufijen ist offline Mitglied Gold
    Registriert seit
    May 2007
    Beiträge
    236
    eben.....

    das ist voll doof

    was gibt es denn da rein theoretisch für andere Möglichkeiten?
     

  4. #4
    soyo soyo ist offline Mitglied Brillant
    Registriert seit
    Apr 2006
    Beiträge
    794
    Er möchte sie nicht vererben, er möchte auf sie zugreifen.

    Ich lerne auch gerade OOP, aber ich mache es so:

    Ich erstelle einfach ein neues Objekt der Klasse auf die ich zufreifen will in der Klasse in der ich gerade arbeite ... ungefähr so :

    PHP-Code:
    class testKlasse {
      private 
    $objAndereKlasse;

      private function 
    eineTestFunktion(){
        
    $this->objAndereKlasse = new AndereKlasse();
        
    $this->objAndereKlasse->tueIrgendwas();
      }

      public 
    __destruct(){
        unset(
    $this->objAndereKlasse);
      }

    Wie gesagt bin ich noch am lernen und weiß nicht ob es so richtig ist.

    Gruß soyo
     
    Aktuelle Zertifizierung: MCP 70-270, CCNA
    In Arbeit: 70-291, 70-290, 70-284, 70-293, 70-294, 70-298

  5. #5
    hans jörg hans jörg ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Ort
    Klagenfurt (Kärnten) [Österreich]
    Beiträge
    210
    Hallo,

    also so schwer ist das nicht, wenn du von der Terminklasse auf die methoden der Datenbankklasse und der Templatklasse zugreifen willst musst du in der Terminklasse einfach zwei Objekt der entsprechenden Typen intialisieren

    zb so
    PHP-Code:
    class TerminKlasse
    {
      private 
    $DataenbankObjekt;
      private 
    $TemplateObjekt;

      public function 
    __construct()
      {
        
    $this->DataenbankObjekt = new DatenbankKlasse();
         
    $this->TemplateObjekt = new TemplateKlasse();
      }

    dann kannst du innerhalb der Terminkasse auf alle methoden und Attribute zugreifen die du in den anderen 2 Klassan mit "public" sichtbar gemacht hast
     

  6. #6
    Avatar von SnEaKy
    SnEaKy SnEaKy ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Ort
    Hattersheim
    Beiträge
    219
    Im Prinzip kann man das so lösen wie ihr es vorgeschlagen habt. Aber ist es von der Überlegung her nicht sinnvoller grade die Datenbankklasse zu vererben?

    Ich benötige ja nur Methoden der Klasse und kein komplett neues Objekt.
     
    Die Welt ist binär: Entweder man ist eine Eins oder eine Null, tot oder lebendig! - Und ich? Lebe...

  7. #7
    soyo soyo ist offline Mitglied Brillant
    Registriert seit
    Apr 2006
    Beiträge
    794
    Wenn ich eine MySQL Verbindung aufbauen will, benötige ich meistens ein Objekt. Genauso sieht es bei der Template-Klasse aus. Ich will nicht sagen das man generell ein neues Objekt erstellen soll wenn man auf andere Klassen zugreifen will, aber bei diesen beiden Klassen find ich das mehr als sinnvoll und vor allem auch nötig.
     
    Aktuelle Zertifizierung: MCP 70-270, CCNA
    In Arbeit: 70-291, 70-290, 70-284, 70-293, 70-294, 70-298

  8. #8
    Avatar von SnEaKy
    SnEaKy SnEaKy ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Ort
    Hattersheim
    Beiträge
    219
    Wie gesagt, ich würde da von einem anderen Denkansatz rangehen und sehe keine Verwendung dafür extra ein Objekt anzulegen.
    Aber es führt ja bekanntlich nicht nur ein Weg nach Rom
     
    Die Welt ist binär: Entweder man ist eine Eins oder eine Null, tot oder lebendig! - Und ich? Lebe...

  9. #9
    rotsch rotsch ist offline Mitglied Bronze
    Registriert seit
    Jun 2003
    Ort
    Schweiz
    Beiträge
    36
    Du könntest auch die Klassen voneinander erben lassen.

    class datenbankklasse {

    }

    class templateklasse extends datenbankklasse {

    }

    class termineklasse extends templateklasse {

    }
     

  10. #10
    sufijen sufijen ist offline Mitglied Gold
    Registriert seit
    May 2007
    Beiträge
    236
    und mit externds arbeitet ihr nicht so gerne oder wie?

    also durch praktisch noch eine 4. klasse alle verbinden

    EDIT: das was rotsch denkt ist glaub ich am besten

    aber wierum mach cih das am besten nur damit ich weiß welche ich im nachhinein dann aufrufen muss


    EDIT2:
    hab nen interessanten artikel gefunden: http://www.devmag.net/webprog/php_class_nesting.htm

    geht um klassen verknüpfungen also genau mein problem

    trotzdem danke an alle antworter
    Geändert von sufijen (13.07.07 um 13:03 Uhr)
     

  11. #11
    rotsch rotsch ist offline Mitglied Bronze
    Registriert seit
    Jun 2003
    Ort
    Schweiz
    Beiträge
    36
    Praktisch eine 4te Klasse?
    Nein, es existieren nur die 3 von dir genannten Klassen. Mit dem Schlüsselwort "extends" teilst du der Klasse mit, dass sie eine andere Klasse sozusagen "erweitert". Sie erbt alle Eigenschaften und Methoden der vererbenden Klasse.

    Du kannst nun mit einer speziellen Variable "$this" auf die Eigenschaften/Methoden der vererbenden Klasse zugreifen.

    Zum Beispiel:
    $this->connect();
     

  12. #12
    sufijen sufijen ist offline Mitglied Gold
    Registriert seit
    May 2007
    Beiträge
    236
    ok aber wie gestalte ich am besten die folge?

    class DB extends Termine?

    class Termine extends DB?

    ich möchte es auch jedenfall so gestalten dass ich die db klasse öfters nutzen kann!
    lassen wir mal die template klasse weg

    demnach müsst eich doch praktisch
    class Template extends DB

    dann beispiel:
    $termin = new Termin
    $termin->showall();

    ohne irgendwas mit db machen zu müssen

    bzw wie connecte ich dann die db? muss ich das dann auch über termin machen? weil cih den db connect eigentlich schon in meiner index.php habe
    Geändert von sufijen (13.07.07 um 14:07 Uhr)
     

  13. #13
    hans jörg hans jörg ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Ort
    Klagenfurt (Kärnten) [Österreich]
    Beiträge
    210
    Hallo,
    also wenn du im eigentlichen Sinne der Objektorientierung arbeiten willst, solltest du in deinem konkreten Beispiel nicht mit Vererbung 'extends' arbeiten. Die ist eigentlich eher für Spezielisierungen gedacht. Zum Beispiel wenn du in einem Programm Kunden, Liferanten etc. hast die im großen und ganzen ähnlich sind, kannst du dir eine Klasse Firma anlegen und deren Eigenschaften an die spezialisierten Klassen Kunde und Lieferant weitervererben. In deinem Fall handelt es sich aber eher um eine Aggregation. D.h. Deine Terminklasse besteht aus einer Datenbankklasse und einer Templateklasse. Dies sollte man eigentlich so lösen, dass man Objekte vom Typ Datenbankklasse und Templateklasse in der Terminklasse intialisiert. Wenn du dies aus Performencegründen nicht so lösen willst, steht in der Objektorientierung auch das Schlüsselwort static zur Verfügung, welches einen Zugriff auf Methoden von Klassen ermöglicht ohne diese initialisieren zu müssen. zb.:
    PHP-Code:
    class test
    {
        static function 
    testmethod()
        {
            return 
    'Testausgabe';
        }
    }
    echo 
    test::testmethod(); 
    Generell solltest du aber bedenken, wenn Performence das Wichtigste bei deinem Programm ist solltest du keine OOP verwenden, denn die ist bei allen sehr großen Vorteilen die sie hat (in der Erstellung, Wartung und Wiederverwertbarkeit) doch noch die langsamste in der Ausführung.
     

  14. #14
    sufijen sufijen ist offline Mitglied Gold
    Registriert seit
    May 2007
    Beiträge
    236
    danke hans jörg für deine antwort

    also mit der performance habe ich keine probleme, da mein programm maximal 5 Personen gleichzeitig nutzen würden.

    ich hol jetzt die datenbank klasse einfach mit global und hab mir eine kleine template funktion gemacht die im moment noch das gleiche leistet!
     

Ähnliche Themen

  1. 2 Netzwerke miteinander verbinden
    Von nabo im Forum Netzwerke
    Antworten: 3
    Letzter Beitrag: 25.03.08, 08:53
  2. Javascript und PHP miteinander verbinden
    Von nolly im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 25.03.05, 00:58
  3. mehrere pdf Dateien miteinander verbinden
    Von lmarin im Forum Sonstige Sprachen
    Antworten: 3
    Letzter Beitrag: 08.10.04, 15:22
  4. Antworten: 3
    Letzter Beitrag: 08.10.04, 15:16
  5. Mehrere Klassen verbinden?
    Von Daisho im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 12
    Letzter Beitrag: 06.07.04, 17:21