PHP Frage zu getter / setter Methoden

baserider

Well-known member
ID: 174417
L
10 März 2007
682
23
Hi,

über verschiedene getter-Methoden lese ich einen Wert aus.
Es gibt auch eine Methode getGewicht(). Nun überlege ich ob es besser ist, die Einheit direkt in die Methode zu schreiben

PHP:
public function getGewicht(){
    return $this->gewicht.' kg';
}

oder die Einheit wegzulassen, da man ja evtl. auch mal den reinen Wert brauchen könnte. Welcher Weg ist denn besser und wie bekomme ich die Einheit dann dazu? Ich kann sie zwar ins Template schreiben, aber es kann ja auch vorkommen es gibt kein Gewicht, dann muss man an jeder Stelle prüfen, und so könnte man es 1 mal in der Methode machen.
 
Ansichtssache:
In typsicheren Sprachen, wie z.B. Java hättest du genau festlegen müssen, ob die Methode double oder String zurückgibt.

Direkt ins Template schreiben kann auch gefährlich sein, falls du andere Einheiten, wie z.B. Gramm, Zentner oder Tonne brauchst.

Ohne jetzt genau zu wissen, was du eigentlich vorhast, würd ich dir zu mehreren Gettern raten: Einen, der dir ne Zahl zurückgibt und in einer festen Einheit (z.B. kg) arbeitet und welche, den du per Parameter anweisen kannst, was sie tun, z.B. getGewichtIn(self::GRAMM) oder vielleicht n String-Getter, der automatisch in ne geeignete Einheit umrechnet und diese anhängt.

edit:
Gut wäre es auch, wenn das Template bestimmt, welche Einheit verwendet wird, da ggf. in einer anderen Sprache auch die Einheit anders aussieht.
 
Ohne jetzt genau zu wissen, was du eigentlich vorhast, würd ich dir zu mehreren Gettern raten: Einen, der dir ne Zahl zurückgibt und in einer festen Einheit (z.B. kg) arbeitet und welche, den du per Parameter anweisen kannst, was sie tun, z.B. getGewichtIn(self::GRAMM) oder vielleicht n String-Getter, der automatisch in ne geeignete Einheit umrechnet und diese anhängt.

ich möchte nur ein paar Produktdaten ausgeben. Dazu gehören auch Abmessungen, Gewicht usw. Überall müssen ja Einheiten mit angegeben werden.
Ich hab auch noch nie getter mit parametern gesehen, sonst könnte man ja per Parameter steuern was ausgegeben werden soll, aber ansonsten könnt ich ja wie du gesagt hast, 2 getter anlegen. Was ist der Unterschied zw. getGewichtIn(self::GRAMM) und einem String-Getter?

edit:
Gut wäre es auch, wenn das Template bestimmt, welche Einheit verwendet wird, da ggf. in einer anderen Sprache auch die Einheit anders aussieht.

Wie meinst du das?
 
Was ist der Unterschied zw. getGewichtIn(self::GRAMM) und einem String-Getter?
Einer, der eben nur umrechnet, der andere schon einen fertigen String generiert (und damit der Template-Engine die Arbeit abnimmt, was immer zu vermeiden is).

Wie meinst du das?
Ganz einfach. z.B. heißt "Kilogramm" auf englisch "kilogram". Hinzukommt, dass die Masseneinheit (kleine Anmerkung btw.: die Einheit des Gewichts is das Newton, nicht das Kilogramm!) "Kilogramm" in anderen Länder gar nicht so verbreitet is, du dort z.B. in "pound" umrechnen solltest.

Wie gesagt: Kommt ganz auf deinen Einsatz an.
 
ok, na da muss ich mir mal nen Kopf machen.

Ich überlege auch gerade, wie man sowas in der Datenbank ablegt.
Es gibt eine Spalte gewicht, aber der Eintrag 100 kann ja g, kg usw. sein. Muss man dann schon in der Datenbank in eienr zusätzlichen Spalte die Einheit mit dazuschreiben?
 
Für die Datenbank normalisierst du deine Daten auf eine Einheit.

Du solltest halt eine passende wählen ;)
Wenn du z.B. Sterne mit den Entfernungen zur Erde abspeichern willst, empfehlen sich Lichtjahre oder Parsecs mehr als Femtometer oder Ellen.
 
ok, aber wenn man z.B. Sportartikel speichert, dann wiegt ein Tennisball nur ein paar Gramm, aber ne riesen Hantelbank ja evtl. über 100kg.
Dann wird also für die Hantelbank 100000 g, oder für den Ball 0,1kg gespeichert.

Wenn man nun beide Produkte aus der Datenbank ausliest, woran macht man fest das man in kg bzw. g umrechnen muss? (je nachdem auf was man sich geeinigt hat). Wird das dann anhand einer bestimmten Grenze unterschieden?
 
Dann wird also für die Hantelbank 100000 g gespeichert?
... oder der Tennisball als 0,001kg, was schweriger zum Handeln is. Ich würde die kleinste Einheit, also hier das Gramm wählen.
Wenn man nun beide Produkte aus der Datenbank ausliest, woran macht man fest das man in kg umrechnen muss?
An dieser Frage stellst du schließlich fest, dass Programmierung einfach is. Schwierig hingegen is immer die Frage, was du eigentlich haben willst (siehe hier: Planung, Analyse, Entwurf).

Ich kanns dir nicht beantworten, sondern dir nur sagen, wie ichs machen würde. Letztlich musst du dir diese Frage aber selber beantworten.

Mach Beispiele (ruhig auch welche, die nicht in deinen Daten vorkommen) und überleg dir, was rauskommen soll:
4564: Sind das "4.564g"? Oder besser "5kg"? Oder "4,6kg"? Oder "4,564kg"?
999: Sind das "999g"? Oder "1kg"? Oder "1,0kg"?
 
Hi,

wenn man sich auf einen Wert einigt, z.B. in g, dann kann ja in der DB 1 stehen oder auch 1000 oder 1000000

Ich meinte es dann so, das halt alles kleiner 1000 in g ausgegeben wird, alles was größer 1000000 ist in Tonnen. (Da man ja weiß man hat in der DB nur eine Einheit, und zwar Gramm)