php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.07.2011, 14:29  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Anfänger
axelf befindet sich auf einem aufstrebenden Ast
Standard Behandlung von Eigenschaften mit Einheiten

Hi,

in meiner Klasse gibt es z.B.

PHP-Code:
public function getHeight(){
  return 
$this->height;

An 3 verschiedenen Stellen soll die Ausgabe, also 1,55m, erfolgen. Von diesen Eigenschaften gibt es etliche und ich muss an 3 Stellen die Einheit jeweils im Template hinschreiben. Wäre es besser, man schreibt für jede dieser Eigenschaften noch eine extra Methode, die den Wert inkl. Einheit zurückgibt oder kann man das auch anders bzw. besser machen?
axelf ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.07.2011, 14:39  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von axelf Beitrag anzeigen
An 3 verschiedenen Stellen soll die Ausgabe, also 1,55m, erfolgen. Von diesen Eigenschaften gibt es etliche
Jeweils in der selben Einheit?
Wird diese Einheit irgendwo mit abgelegt?
Soll ggf. auch mal in andere Einheiten umgerechnet werden?

Zitat:
Wäre es besser, man schreibt für jede dieser Eigenschaften noch eine extra Methode, die den Wert inkl. Einheit zurückgibt oder kann man das auch anders bzw. besser machen?
Du könntest bspw. der Methode auch einen optionalen bzw. vorbelegten Parameter mitgeben, der sie entscheiden lässt, ob sie nur den Wert, oder Wert und Einheit zurückgeben soll.

Wenn du die Werte in unterschiedlichen Kontexten allerdings mal als Zahlwerte für weitere Berechnungen, und mal als Stringwerte für die Ausgabe bekommen willst, dann wären zwei unterschiedliche Methoden vielleicht angebrachter.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 02.07.2011, 14:44  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.168
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

wär es da nicht praktisch kleine Hilfsmethoden in einer Hilfsklasse zu haben die so Standardsachen macht ?
Evtl. brauch man diese Umrechnungen ja in mehreren Klassen.

wie geht man in OOP mit Hilfsmethoden (Datumsberechnungen, Zufallszahlen ermitteln usw.) um die in keine Klasse so richtig reinpassen ?
__________________
Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.
Koala ist offline   Mit Zitat antworten
Alt 02.07.2011, 14:55  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Du müsstest erstmal beschreiben, wie das Template angebunden ist. Normalerweise weist man einmal den Wert zu, meinetwegen $tpl->assert ('var_with_unit' , $obj->getHeight() . ' ' . $obj->getUnit()); oder beides einzeln und nutzt die Daten im Template (denn dafür ist es da).
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 02.07.2011, 14:56  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Wie wäre es stattdessen mit einem Value-Objekt für height? Die Klasse dafür könnte so aussehen:

PHP-Code:
class Length
{
  const 
1;
  const 
CM 0.01;
  const 
KM 1000;
  
// ...

  
private $value;

  public function 
__construct($m) {
    
$this->value $m;
  }

  public function 
getValue($unit self::M) {
    return 
$this->value $unit;
  }

  public function 
getFormatted($unit self::M) {
  
// hier abhängig von Einheit und Lokalisierung z.B. "1,55 m" zurückgeben
  
}
  public function 
__toString() {
    return 
$this->getFormatted();
  }

Wie man sieht braucht es gar keine Hilfsfunktionen "die in keine Klasse hineinpassen". Ganz streng OOP wäre noch, nach dem Separation of Concerns Prinzip die Formatierung in eine weitere Klasse LengthFormatter auszulagern.

Edit: nutzen würde ich das z.B. so, um auf nikoschs Beispiel aufzubauen:
PHP-Code:
$tpl->assign('height'$obj->getHeight()); 
Template:
PHP-Code:
<?php echo $height->getFormatted(Length::M); ?>
Template mit Hilfe von __toString:
PHP-Code:
<?php echo $height?>

Geändert von fab (02.07.2011 um 15:01 Uhr).
fab ist offline   Mit Zitat antworten
Alt 02.07.2011, 15:22  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Anfänger
axelf befindet sich auf einem aufstrebenden Ast
Standard

@ChrisB:
Ich nutze smarty, also weiße ganz normal die Variablen zu. Die Einheit steht derzeit noch fest im Template.

Die Einheit selber wird nirgends abgelegt.

Es gibt auch Werte, die umgerechnet werden sollen. In der DB steht z.B. die Speichergröße immer in MB, aber wenn dort 2048 steht, wird 2 GB ausgegeben.

@fab:
Dann benötige ich also für alle anderen Eigenschaften mit Einheiten ebenfalls eigene Klassen?
axelf ist offline   Mit Zitat antworten
Alt 02.07.2011, 15:30  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Nur je Einheitentyp, nicht je Eigenschaft! Für MB und GB z.B. kannst du analog eine Klasse MemorySize (besserer Name fällt mir gerade nicht ein) anlegen, wie die Umrechnung funktionieren kann siehst du ja an obigem Beispiel schon.
fab ist offline   Mit Zitat antworten
Alt 02.07.2011, 15:39  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Anfänger
axelf befindet sich auf einem aufstrebenden Ast
Standard

@fab zu deinem Beispiel nochmal ne Frage:

Das würde bedeuten, das die Methode getLength() nicht ienfach nur den Wert zurückgibt, sondern ein Objekt der Klasse Length?

PHP-Code:
public function getLength(){
  return new 
Length($this->length);

wenn ich dann im Template den Wert mit Einheit haben will, benutze ich getFormatted(), falls ich den Wert rein als Zahl im Skript benötige:

PHP-Code:
$length $obj->getLength();
$value $length->getValue(); // zur weiteren Verarbeitung im Skript 
axelf ist offline   Mit Zitat antworten
Alt 02.07.2011, 15:45  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Ja, getHeigtht gibt ein Objekt der Klasse Length zurück, sinnvollerweise ist aber direkt die Eigenschaft height vom Typ Length, das Objekt erst im Getter zu erzeugen ist etwas halbherzig. Denn wie du richtig erkannt hast, kannst du mit getValue auch weiter auf dem numerischen Wert arbeiten. Falls sich der Wert im Laufe des Skripts ändert (Beispiel):
PHP-Code:
$this->height = new Length($this->height->getValue() + 1); 
Da Value Objects üblicherweise unveränderbar sind. Musst du viele Berechnungen vornehmen, kann es für dich aber evtl. auch sinnvoll sein, das nicht so eng zu nehmen und Operationen direkt auf dem Objekt zu erlauben (sei es mit einem Setter oder indem du value einfach public machst)
fab ist offline   Mit Zitat antworten
Alt 02.07.2011, 15:51  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Anfänger
axelf befindet sich auf einem aufstrebenden Ast
Standard

Hi,

ich bin eben etwas durcheinandergekommen, wegen Length und height, aber das is ja der gleiche Einheitentyp (hattest du vorhin geschrieben) und somit ist die Klasse Length für höhen- und Breitenangaben nutzbar.

Gefällt mir gut. Danke für deine Hilfe.
axelf ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
input - Eigenschaften Beastofchaos PHP Einsteiger 6 31.05.2011 21:20
[Erledigt] Einheiten Umrechnen (Längen, Druck usw...) Mavericklp PHP Einsteiger 2 18.01.2011 14:45
[Erledigt] Eigenschaften vom Konstruktor an Methoden übergeben litterauspirna JavaScript, Ajax und mehr 1 28.12.2010 10:10
[Erledigt] Mehrere mehrstufige Eigenschaften zuordnen ByStones Datenbanken 4 23.09.2010 16:02
Per php die Eigenschaften eines div auslesen? dɥd PHP Tipps 2010 7 06.08.2010 19:33
[Erledigt] OOP Ausgabe mehrerer Eigenschaften in einem Echo. Cutthroat PHP Tipps 2010 4 28.01.2010 21:47
Eigenschaften, Methoden und Funktionen alex9787 PHP Tipps 2009 5 30.12.2009 19:01
Eigenschaften eines Netzlaufwerkes auslesen Ferengi-Master PHP Tipps 2009 4 29.08.2009 13:08
Select Abfrage von zwei Eigenschaften BlackBroom Datenbanken 5 02.06.2009 11:29
Q sucht Webentwickler mit guten Eigenschaften Thilo Beitragsarchiv 0 03.12.2007 17:30
zwei Eigenschaften und ein Wert kampfnickel HTML, Usability und Barrierefreiheit 8 12.09.2007 09:37
Eigenschaften von Bildern Spacefish PHP-Fortgeschrittene 3 08.08.2007 11:07
unterschiedliche Behandlung von Browsern durch PHP/Apache? Server, Hosting und Workstations 6 22.01.2006 13:00
Spalten einer Tabelle mit Eigenschaften auslesen GELight PHP Tipps 2005-2 6 25.07.2005 13:14
Anzahl der Einheiten über einen Zeitraum hochzählen Transmitter PHP-Fortgeschrittene 2 09.11.2004 08:43

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php $einheit =, einheiten php

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:36 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum