| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

09-09-2011, 17:55
|
|
lx-club
Registrierter Benutzer
|
|
Registriert seit: Nov 2003
Beiträge: 825
|
|
Frage zur Vererbung
Hi,
bei mir gibt es eine Elternklasse und jeweils 4 Kindklassen. Unter anderem wird in 2 Kindklassen eine Funktion benötigt, jedoch in der 3. und 4. nicht.
Sollte diese Funktion trotzdem in die Elternklase geschrieben werden oder gibt es dafür eine bessere Lösung?
|

09-09-2011, 18:20
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Wenn man in der Elternklasse etwas definiert, was in der Kindklasse nicht gebraucht wird, dann hat man meist was falsch gemacht.
Alternativ:
Definiere "es" als Interface. Implementiere "es" nur in den Klassen, welche "es" auch benötigen.
Oder http://en.wikipedia.org/wiki/Delegation_(programming)
Oder ab php5.4 evtl. auch als trait
|

09-09-2011, 18:40
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
ohne genauere Angaben zum beabsichtigten Zweck ist es schwierig, konkrete Vorschläge zu machen. Einserseits können die Vorschläge von Combie sinnvoll sein, in bestimmte Fällen macht aber vielleicht ein Decorator-Pattern mehr Sinn oder es läuft darauf hinaus, dass sich zwei der Kindklassen besser von einer weiteren Klasse ableiten, die ihrerseits Kind deiner Elternklasse ist.
Welche Variante davon nun die beste ist, hängt aber stark vom Anwendungsfall ab.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

09-09-2011, 20:19
|
|
lx-club
Registrierter Benutzer
|
|
Registriert seit: Nov 2003
Beiträge: 825
|
|
Hi,
danke für die Antworten.
Ich habe es jetzt so gemacht:
Zitat:
Zitat von AmicaNoctis
oder es läuft darauf hinaus, dass sich zwei der Kindklassen besser von einer weiteren Klasse ableiten, die ihrerseits Kind deiner Elternklasse ist.
|
Die Klassen, die die noch weitere Funktionalitäten benötigen erben von einer weiteren Klasse, alles anderen Klassen erben von einer anderen Klasse
PHP-Code:
class A{}
class B extends A
class C extends B // erweiterte Funktionallität
class D extends B // erweiterte Funktionalität
class E extends A
|

09-09-2011, 20:25
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Sollten das nicht abstrakte Klassen sein?
|

09-09-2011, 20:28
|
|
lx-club
Registrierter Benutzer
|
|
Registriert seit: Nov 2003
Beiträge: 825
|
|
Es müsste aber nur class A abstract sein oder?
|

10-09-2011, 04:14
|
 |
mermshaus
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 165
|
|
Das ist nicht pauschal zu beantworten. Klassen, die nicht instanziiert werden müssen/sollen/dürfen, sind diejenigen, die auf abstract gesetzt werden könnten.
Das beste Beispiel ist eben die Klasse, die nur deshalb existiert, um gemeinsame Funktionalität unredundant für weitere konkrete Kindklassen zur Verfügung zu stellen. Solche Klassen erfüllen keinen konkreten Zweck, sondern liefern nur Kindklassen Werkzeuge zur Erleichterung ihrer Arbeit, bilden also eine unfertige Schablone.
|

11-09-2011, 11:39
|
|
lx-club
Registrierter Benutzer
|
|
Registriert seit: Nov 2003
Beiträge: 825
|
|
Hi,
ich habe nun noch ein Problem, wenn ich die Vererbung so nutze:
PHP-Code:
class A{}
class B extends A
class C extends B // erweiterte Funktionallität
class D extends B // erweiterte Funktionalität
class E extends A
Es gibt eine Funktionalität, die von Klasse B und C benötigt wird. Nun kann man ja nicht von 2 Klassen erben. Gibt es da noch eine andere Lösung?
|

11-09-2011, 11:40
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Kommt drauf an, um was für eine Funktionalität es sich handelt.
|

11-09-2011, 11:46
|
|
lx-club
Registrierter Benutzer
|
|
Registriert seit: Nov 2003
Beiträge: 825
|
|
Ich baue mir einer Abfrage zusammen die ich in diesen Klassen benötige. Möchte diese aber nicht doppelt schreiben.
|

11-09-2011, 11:51
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
B und C liegen doch im selben Zweig. Alles was B kann, kann C auch. Oder geht es dir darum, dass D es nicht können soll?
Konkretisier doch bitte mal deine Klassen und Methoden durch echte Namen. Dann könnte man erstmal eine Idee bekommen, worum es geht und vielleicht noch andere mögliche Lösungen vorschlagen.
Edit: Evtl. kommst du besser, wenn du die benötigten Abfragen (ich vermute mal, es geht um SQL-Code) auslagerst und nachlädst, statt sie direkt in den PHP-Code zu schreiben.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
Geändert von AmicaNoctis (11-09-2011 um 11:53 Uhr)
|

11-09-2011, 12:17
|
|
lx-club
Registrierter Benutzer
|
|
Registriert seit: Nov 2003
Beiträge: 825
|
|
Hi,
sorry, mein Fehler. Ich meinte im Beispiel Klasse C und E und hatte nur deswegen gefragt:
Zitat:
Zitat von combie
Wenn man in der Elternklasse etwas definiert, was in der Kindklasse nicht gebraucht wird, dann hat man meist was falsch gemacht.
|
Ansonsten könnte man ja alles in Klasse A schreiben
Es geht um 5 Hersteller. Für jeden Hersteller muss ich u.a. einen SQL-Query zusammenbauen. Bei manchen Herstellern sind Teile des Query identisch und das wollte ich auslagern. Diese identischen Teile werden jeweils auch dynamisch zusammengebaut.
|

11-09-2011, 12:37
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Bleibt für mich die Frage: Was haben SQL-Queries bei einem Hersteller verloren?
|

11-09-2011, 13:05
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Und, was unterscheidet die Hersteller derart, dass eigene Klassen für sie überhaupt gerechtfertigt sind?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

11-09-2011, 13:33
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Oder, um beim SQL-Problem zu bleiben: Wie unterscheiden sich diese dynamischen Abfragen und kann man sie nicht vielleicht vereinen und nur über WHERE und ggf. HAVING parametrisieren?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|