PHP5 - Klassen - Vererbung
Knusperklumpen
- php
Hi.
Ich habe folgendes Problem:
Es gibt eine Klasse (klasse1) und eine Unterklasse (klasse2), die von klasse1 abgeleitet ist.
Nun erstelle ich eine Instanz von klasse1 und arbeite mit dieser.
Die Eigenschaften der Instanz füllen sich langsam mit Werten und an einer bestimmten Stelle brauche ich zusätzliche Eigenschaften und Methoden und zwar diese, die in klasse2 zu finden sind.
Also erstelle ich eine Instanz von klasse2, weil dann die Eigenschaften von klasse1 auf klasse2 vererbt werden.
Doofer- und logischerweise sind die in Instanz 1 veränderten Werte der Eigenschaften beim Anlegen einer neuen Instanz ja aber nicht verfügbar aber genau sowas brauche ich.
Gibt es die Möglichkeit Unterinstanzen einer Instanz anzulegen?
So in der Art: $klasse1->klasse2;
Ich will also der Instanz einer Klasse (klasse1) eine Unterinstanz geben, die wiederum eine Instanz einer anderen Klasse ist (klasse2).
Die Instanz1 (von klasse1) soll dadurch um die Eigenschaften und Methoden der Instanz2 (von klasse2) erweitert werden aber so, dass Instanz2 mit den Eigenschaften von Instanz1 arbeiten kann.
Ich hoffe, das ist halbwegs verständlich ausgedrückt :-)
Hat jemand ne Idee wie man sowas macht?
Danke und mfg
Knuserpklumpen
Hallo,
Warum erzeugst du nicht einfach eine Instanz von klasse2, die dann alle Methoden von klass1 + ihre eigenen hat?
Ansonsten gibt´s ja auch noch statische Methoden.
Beste Grüße
Warum erzeugst du nicht einfach eine Instanz von klasse2, die dann alle Methoden von klass1 + ihre eigenen hat?
Ja, das hab ich ja vor nur werden sämtliche Werte beim Anlegen einer neuen Instanz ja mit den Standardwerten instanziiert und nicht mit den Werten, die in Instanz 1 schon vorhanden sind.
Bsp. so wie ich es haben will:
Wir nehmen an in der Klasse klasse1 gibt es die Eigenschaft test und die ist beim Instanziiren 1.
$klasse1 = new klasse1;
echo $klasse1->test;
// ergibt die Ausgabe 1
// ich ändere den Wert
$klasse1->test = 2;
echo $klasse1->test;
// ergibt die Ausgabe 2
// nun lege ich eine Instanz von klasse2 an
$klasse2 = new klasse2;
// ich erbe die Eigenschaft test von klasse1
// nur wird diese Eigenschaft ja wieder mit dem Wert 1 instanziiert
echo $klasse2->test;
// ergibt die Ausgabe 1
// ich möchte aber, dass "echo $klasse1->test;" mir die 2 ausgibt,
// die ich vorher der Instanz $klasse1 zugewiesen habe.
// ich weiß, dass ist so nicht möglich, deswegen soll $klasse2 ja eine Unterinstanz von $klasse1 werden, damit ich auch die Werte noch habe ... da weiß ich aber nicht ob und wenn ja, wie das geht
Ansonsten gibt´s ja auch noch statische Methoden.
Du meinst, einzelnes neuzuweisen der Werte?
mfg
Knusperklumpen
echo $begrüßung;
Gibt es die Möglichkeit Unterinstanzen einer Instanz anzulegen?
Eine Instanz ist normalerweise etwas fertiges. Es können sich zwar noch Eigenschaften verändern aber neue kommen eigentlich nicht hinzu. PHP ist hier etwas anders. Sobald man schreibendend auf eine nicht vorhandene Eigenschaft/Variable einer Instanz zugreift wird diese angelegt. Dadurch wird natürlich nicht irgendwann aus einer klasse1-Instanz ein klasse2-Instanz, auch wenn es dann irgendwann die gleichen Eigenschaften aufweisen sollte.
Willst du eine echte klasse2-Instanz haben, müsstest du dir eine klasse2-Instanz anlegen und die Werte der klasse1-Instanz dorthin kopieren. Dieses Vorgehen finde ich aber alles andere als schön.
Die Instanz1 (von klasse1) soll dadurch um die Eigenschaften und Methoden der Instanz2 (von klasse2) erweitert werden aber so, dass Instanz2 mit den Eigenschaften von Instanz1 arbeiten kann.
Hat jemand ne Idee wie man sowas macht?
Vermutlich ganz anders. Warum verwendest du nicht von Anfang an eine klasse2-Instanz? Wenn klasse2 klasse1 erweitert, kannst du an jeder Stelle, wo klasse1 verlangt wird auch eine klasse2-Instanz übergeben.
Die Eigenschaften der Instanz füllen sich langsam mit Werten und an einer bestimmten Stelle brauche ich zusätzliche Eigenschaften und Methoden und zwar diese, die in klasse2 zu finden sind.
Für mich liest sich das so, dass dein Verständnis von Klassen ist noch sehr ausbaufähig ist. :-)
Wieso füllt sich die Instanz langsam mit Werten? Was machst du denn mit dieser Instanz? Willst du nicht vielleicht lieber ein Array oder eine andere Struktur verwenden, die für ein Füllen vorgesehen ist?
echo "$verabschiedung $name";
Willst du eine echte klasse2-Instanz haben, müsstest du dir eine klasse2-Instanz anlegen und die Werte der klasse1-Instanz dorthin kopieren. Dieses Vorgehen finde ich aber alles andere als schön.
ich ja eben auch nicht.
Vermutlich ganz anders. Warum verwendest du nicht von Anfang an eine klasse2-Instanz? Wenn klasse2 klasse1 erweitert, kannst du an jeder Stelle, wo klasse1 verlangt wird auch eine klasse2-Instanz übergeben.
Das hab ich ja auch schon überlegt aber das halte ich eben auch nicht für zweckmäßig. Ich möchte nicht ein Objekt erzeugen, welches Methoden und Eigenschaften hat, die ich nur in bestimmten Situationen brauche, für den normalen Gebrauch aber nicht. Um es mal mit dem Beispiel vom Sven Rautenberg zu beschreiben ... ich kauf doch nicht einen LKW, wenn ich ihn nur einmal im Jahr brauche ... dann leih ich den, oder hänge mir halt einen Anhänger ans Auto.
Für mich liest sich das so, dass dein Verständnis von Klassen ist noch sehr ausbaufähig ist. :-)
Da könntest du sogar recht haben :-)
Wieso füllt sich die Instanz langsam mit Werten?
Na indem ich den Eigenschaften neue Werte zuweise ... dafür sind Objekte ja da, dass die Werte aufnehmen.
mfg
Knusperklumpen
Moin!
Es gibt eine Klasse (klasse1) und eine Unterklasse (klasse2), die von klasse1 abgeleitet ist.
Es gibt Baupläne für einen PKW (4 Räder, Türen, Ladekapazität im Kofferraum) und für einen LKW (4 Räder, Türen, Ladekapazität auf der Ladefläche, zusätzlich Kran oder Hebebühne).
Nun erstelle ich eine Instanz von klasse1 und arbeite mit dieser.
Du kaufst einen PKW.
Die Eigenschaften der Instanz füllen sich langsam mit Werten
Du füllst den Kofferraum.
und an einer bestimmten Stelle brauche ich zusätzliche Eigenschaften und Methoden und zwar diese, die in klasse2 zu finden sind.
Plötzlich stellst du fest, dass du doch einen LKW brauchst.
Also erstelle ich eine Instanz von klasse2, weil dann die Eigenschaften von klasse1 auf klasse2 vererbt werden.
Du kaufst einen LKW.
Wie kriegst du jetzt die bisher im PKW angesammelte Ladung in den LKW?
Antwort: Jedes Teil ausladen und neu in den LKW einladen.
Wie spart man sich das lästige Umladen? Man kauft gleich einen LKW!
- Sven Rautenberg