Hallo zusammen,
ich arbeite mich gerade in die OOP ein.
Ich habe folgendes Beispiel:
Oberklasse = Item
Benötigte Attribute sind: id, name
Davon abgeleitet sind die Klasse Klamotten und Waffen
Klamotte hat als Attribut farbe
Waffe hat als Attribut magazingröße
Alle Attribute werden zwingend zum erstellen eines Objekts benötigt. Also habe ich in der Item Klasse den Konstruktor für id und name und in den abgeleiteten Klassen je auch einen Konstruktor für id, name, farbe, der dann die benötigten Werte an den Eltern Konstruktor weitergibt:
parent::__construct($id, $name);
Funktioniert alles ganz ordentlich, allerdings möchte ich ja eben nicht alle Attribute in die Klammern packen müssen, wenn ich das Objekt erstelle:
new Clothing($id, $name, $farbe);
sondern dies lieber schön über setter machen.
$shoe
->setId($id)
->setName($id)
->setFarbe($id);
Auch kein Problem.
Wie stelle ich aber bei dieser Variante sicher, dass auch wirklich alles gesetzt wird, wenn ich auf Konstruktoren verzichte?
Gibt es eine Möglichkeit eine Methode zu implementieren die VOR dem jeweiligen Getter aufgerufen wird und mir dann zb sagt: Attribut XY ist nicht gesetzt?
Oder gibt es eine andere Möglichkeit um zu prüfen bzw. festzulegen, welche Attribute gesetzt werden müssen?
Oder lässt man diese Überprüfung ganz weg? Man merkt ja, wenn nichts zurück kommt?
Was ist dabei best Practice?
Danke euch!
ich arbeite mich gerade in die OOP ein.
Ich habe folgendes Beispiel:
Oberklasse = Item
Benötigte Attribute sind: id, name
Davon abgeleitet sind die Klasse Klamotten und Waffen
Klamotte hat als Attribut farbe
Waffe hat als Attribut magazingröße
Alle Attribute werden zwingend zum erstellen eines Objekts benötigt. Also habe ich in der Item Klasse den Konstruktor für id und name und in den abgeleiteten Klassen je auch einen Konstruktor für id, name, farbe, der dann die benötigten Werte an den Eltern Konstruktor weitergibt:
parent::__construct($id, $name);
Funktioniert alles ganz ordentlich, allerdings möchte ich ja eben nicht alle Attribute in die Klammern packen müssen, wenn ich das Objekt erstelle:
new Clothing($id, $name, $farbe);
sondern dies lieber schön über setter machen.
$shoe
->setId($id)
->setName($id)
->setFarbe($id);
Auch kein Problem.
Wie stelle ich aber bei dieser Variante sicher, dass auch wirklich alles gesetzt wird, wenn ich auf Konstruktoren verzichte?
Gibt es eine Möglichkeit eine Methode zu implementieren die VOR dem jeweiligen Getter aufgerufen wird und mir dann zb sagt: Attribut XY ist nicht gesetzt?
Oder gibt es eine andere Möglichkeit um zu prüfen bzw. festzulegen, welche Attribute gesetzt werden müssen?
Oder lässt man diese Überprüfung ganz weg? Man merkt ja, wenn nichts zurück kommt?
Was ist dabei best Practice?
Danke euch!