ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
1340
1340
EMPFEHLEN
-
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:- nun mit der Termineklasse auf die Datenbankklasse zugreifen um Querys zu senden etc.
- 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)
-
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...
-
eben.....
das ist voll doof
was gibt es denn da rein theoretisch für andere Möglichkeiten?
-
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 :
Wie gesagt bin ich noch am lernen und weiß nicht ob es so richtig ist.PHP-Code:class testKlasse {
private $objAndereKlasse;
private function eineTestFunktion(){
$this->objAndereKlasse = new AndereKlasse();
$this->objAndereKlasse->tueIrgendwas();
}
public __destruct(){
unset($this->objAndereKlasse);
}
}
Gruß soyoAktuelle Zertifizierung: MCP 70-270, CCNA
In Arbeit: 70-291, 70-290, 70-284, 70-293, 70-294, 70-298
-
13.07.07 11:47 #5
- 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
dann kannst du innerhalb der Terminkasse auf alle methoden und Attribute zugreifen die du in den anderen 2 Klassan mit "public" sichtbar gemacht hastPHP-Code:class TerminKlasse
{
private $DataenbankObjekt;
private $TemplateObjekt;
public function __construct()
{
$this->DataenbankObjekt = new DatenbankKlasse();
$this->TemplateObjekt = new TemplateKlasse();
}
}
-
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...
-
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
-
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...
-
Du könntest auch die Klassen voneinander erben lassen.
class datenbankklasse {
}
class templateklasse extends datenbankklasse {
}
class termineklasse extends templateklasse {
}
-
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)
-
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();
-
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 habeGeändert von sufijen (13.07.07 um 14:07 Uhr)
-
14.07.07 08:59 #13
- 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.:
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.PHP-Code:class test
{
static function testmethod()
{
return 'Testausgabe';
}
}
echo test::testmethod();
-
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
-
2 Netzwerke miteinander verbinden
Von nabo im Forum NetzwerkeAntworten: 3Letzter Beitrag: 25.03.08, 08:53 -
Javascript und PHP miteinander verbinden
Von nolly im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 25.03.05, 00:58 -
mehrere pdf Dateien miteinander verbinden
Von lmarin im Forum Sonstige SprachenAntworten: 3Letzter Beitrag: 08.10.04, 15:22 -
mehrere pdf Dateien miteinander verbinden
Von lmarin im Forum JavaAntworten: 3Letzter Beitrag: 08.10.04, 15:16 -
Mehrere Klassen verbinden?
Von Daisho im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 12Letzter Beitrag: 06.07.04, 17:21





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren