---
title: "Aus mehreren Klassen erben?"
url: "https://www.typo3.net/d/105688-aus-mehreren-klassen-erben"
source: "typo3.net"
tags: ["Extensions","Extbase","Frage","PHP"]
created: "2011-06-01"
last_reply: "2011-06-16"
replies: 7
solved: false
page: 1
pages: 1
lang: "de"
---

# Aus mehreren Klassen erben?

Extensions › Extbase · 7 Antworten · gestartet 2011-06-01

## Eröffnungsbeitrag

**Unbekannter Benutzer** · 2011-06-01 · [Beitrag #1](https://www.typo3.net/d/105688-aus-mehreren-klassen-erben/1)

Hi,

ist es möglich, dass ein Domain Model von mehreren Klassen erbt?

Folgendes Szenario:
Domain Model **PKW** hat folgende Attribute: Hersteller, Erstzulassung, Farbe, Modellbezeichnung, VolumenKofferraum
Domain Model **LKW** hat folgende Attribute: Hersteller, Erstzulassung, Farbe, Reifenanzahl, Ladevolumen

Wie man sehen kann, sind einige Attribute doppelt vorhanden. Diese sollen jetzt in eine eigene Klasse ausgelagert werden:
Domain Model **FahrzeugDetails** hat diese Attribute: Hersteller, Erstzulassung, Farbe

Normalerweise erben Domain Models ja von der Extbase Klasse **Tx_Extbase_DomainObject_AbstractEntity**:

```php
<?php
class Tx_MyExt_Domain_Model_PKW extends Tx_Extbase_DomainObject_AbstractEntity {}
?>
```

Wie können jetzt die Klassen **PKW** und **LKW** gleichzeitig von **Tx_Extbase_DomainObject_AbstractEntity** und von **FahrzeugDetails** erben? Sowas geht ja nicht?!

```php
<?php
class Tx_MyExt_Domain_Model_PKW extends Tx_Extbase_DomainObject_AbstractEntity extends Tx_MyExt_Domain_Model_FahrzeugDetails {}
?>
```

Danke schon mal für eure Hilfe! :)

## Antworten

### [#2](https://www.typo3.net/d/105688-aus-mehreren-klassen-erben/2) · oliver_g · 2011-06-01

Hi,

du kannst nicht von mehreren Klassen erben, da PHP nur eine Klasse als Elterklasse erlaubt. Du könntest alternativ mit Interfaces arbeiten und dort deine Standardeigenschaften reintun.

Oder du arbeitest mit abstrakten Klassen. Diese abstrakte erbt von AbstractEntity und deine Klassen von der abstrakten Basisklasse.

### [#3](https://www.typo3.net/d/105688-aus-mehreren-klassen-erben/3) · Unbekannter Benutzer · 2011-06-01

Hi,

Danke für deine Antwort :)

In der Extension SjrOffers hab ich gesehen, dass mit abstrakten Klassen gearbeitet wurde. Ich schaff es aber nicht, dies auf meine eigene Klasse zu übertragen.

In der Extension SjrOffers gibt es z.B. die abstrakte Klasse **Tx_SjrOffers_Domain_Model_RangeConstraint**. Diese erbt von **Tx_Extbase_DomainObject_AbstractValueObject**,

Dann gibt es die Klasse **Tx_SjrOffers_Domain_Model_DateRange**, welche von **Tx_SjrOffers_Domain_Model_RangeConstraint** erbt. Es gibt in der Klasse **DateRange** aber "eigene" Programmlogik, so dass die geerbte Programmlogik von **RangeConstraint** ausreicht um alle Funktionalitäten in **DateRange** abzubilden.

Meine Klassen (PKW, LKW) haben aber noch weitere Funktionen, welche in der Klasse **FahrzeugDetails** nicht vorhanden sind. Dazu brauche ich dann aber die Vererbung von **Tx_Extbase_DomainObject_AbstractEntity** in **PKW** und **LKW**.

Hab ich irgendwo einen Denkfehler? Muss ich meine Klassen vielleicht anderes aufbauen und "verknüpfen"?

PS: mit Programmlogik meine ich alle Attribute und Methoden einer Klasse.

### [#4](https://www.typo3.net/d/105688-aus-mehreren-klassen-erben/4) · Unbekannter Benutzer · 2011-06-01

Ich noch mal ;)

Hab deinen Rat befolgt und meine abstrakte Klasse **FahrzeugDetails** nicht von **Tx_Extbase_DomainObject_AbstractValueObject** sondern von **Tx_Extbase_DomainObject_AbstractEntity** erben lassen.

Nun erben die Klassen **PKW** und **LKW** von **FahrzeugDetails**.

Wozu ist dann aber die Klasse **Tx_Extbase_DomainObject_AbstractValueObject** gut?

Vielen Dank :)

### [#5](https://www.typo3.net/d/105688-aus-mehreren-klassen-erben/5) · oliver_g · 2011-06-03

Uupps, hab deine Frage in deinem anderem Thread beantworten wollen ;-) Siehe dort.

Also ich weiß nur dass ein ValueObject für ein exakt und nicht weiter zerlegbares "Etwas" steht, während ein EntityObject zerlegbar und nicht eindeutig sein muss. Ein EntityObject bekommt soweit ich weiß einen "künstlichen" Identifier, während ein AbstractObject allein durch seine Werte eindeutig ist.

Vielleicht wird dies irgendwie durch PHP-Code in den entsprechenden abstrakten Klassen forciert, müsste man mal nachschauen ;-)

Gruß

### [#6](https://www.typo3.net/d/105688-aus-mehreren-klassen-erben/6) · Unbekannter Benutzer · 2011-06-03

Hi,

welchen Thread meinst du? Kannst du einen Link posten?

Ok deine Erklärung muss ich mir noch mal genauer anschauen wenn ich richtig wach bin ;)

Danke.

### [#7](https://www.typo3.net/d/105688-aus-mehreren-klassen-erben/7) · Unbekannter Benutzer · 2011-06-15

Zum Unterschied Value Object und Entity kann ich nur ein Buch über Domain Driven Design empfehlen, z.B. Domain Driven Design von Eric Evans. Generell ist ein Value Object austauschbar gegen ein anderes mit den selben Properties, während eine Entity eine, über die Eigenschaften hinausgehende, Existenz hat.

Beispiel Model "Person" mit Vorname + Nachname. Du kannst aber zwei Person Objects nicht einfach gegeneinander austauschen nur weil sie denselben Namen haben. Es können eben trotzdem unterschiedliche Personen sein. Wird technisch dann häufig über einen unique identifier gelöst.

Ein Model "Farbe" mit Rot, Grün, Blau als Properties dürfte aber in der Regel schon ein Value Object sein, denn die Farbe ist vollständig durch die drei Werte definiert, ein zweites object mit den selben Werten für Rot, Grün, Blau kann getrost gegen das erste ausgetauscht werden, d.h. es sollte bei value objects eigentlich nie zwei mit den selben properties geben.

### [#8](https://www.typo3.net/d/105688-aus-mehreren-klassen-erben/8) · oliver_g · 2011-06-16

Ich definiere den Unterschied für mich einfach so:

Ein Value Object ist nicht weiter zerlegbar, es beschreibt sich also eindeutig und atomar. Ein Entity-Object ist wiederum zerlegbar in (Unter)Objekte, es ist für sich alleine genommen noch nicht identifizierend.

---

Quelle: „Aus mehreren Klassen erben?“, typo3.net, https://www.typo3.net/d/105688-aus-mehreren-klassen-erben
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
