Manipulation von Maßeinheiten
Analysieren und normalisieren von Eingaben kombiniert mit der Ausgabe in lokalisierter
Schreibweise macht die Daten für Benutzer in fremden Gebietsschemata benutzbar. Viele
zusätzliche Methoden existieren in den Zend_Measure_* Komponentenum
diese Daten zu manipulieren und mit Ihnen zu arbeiten nachdem Sie normalisiert wurden.
KonvertierenAddieren und SubtrahierenIdentität VergleichenWerte VergleichenWerte per Hand
ändernTyp per Hand ändernKonvertieren
Das warscheinlich wichtigste Feature ist die Konvertierung in verschiedene Maßeinheiten.
Die Konvertierung von Maßeinheiten kann durch verwendung der Methode
convertTo() beliebig oft durchgeführt werden. Maßeinheiten können nur in
andere Einheiten des gleichen Typs (Klasse) konvertiert werden. Deswegen ist es nicht
möglich z.B. eine Länge in ein Gewicht zu konvertieren, was ja schlechte
Programmierpraxis und Fehler erlauben würde ohne das eine Ausnahme geworfen wird.
Die convertTo Methode akzeptiert einen optionalen Parameter. Mit diesem
Parameter kann eine Genauigkeit, für den zurückgegebenen Wert, definiert werden. Die
Standardgenauigkeit ist '2'.
KonvertierenconvertTo('KILOGRAM');
// Konstanten sind eine "bessere Praxis" als Zeichenketten
print "Tonne:".$unit->convertTo(Zend_Measure_Weight::TON);
// define a precision for the output
print "Tonne:".$unit->convertTo(Zend_Measure_Weight::TON, 3);
]]>Addieren und Subtrahieren
Maßeinheiten können miteinander durch add() addiert und durch
sub() subtrahiert werden. Jede Addition erzeugt als Ergebnis ein neues
Objekt. Das aktuelle Objekt wird durch die Klasse nicht verändert. Das neue Objekt ist
vom selben Typ die das originale Objekt. Dynamische Objekte unterstützen einen flüssigen
Programmierstil, bei dem komplexe Sequenzen von Operationen geschachtelt werden können
ohne das Risiko eines Nebeneffekts durch die Veränderung des Eingabe Objektes.
Werte addierenadd($unit2);
echo $sum; // Ausgabe "300 cm"
]]>Automatische Konvertierung
Beim Addieren eines Objektes zu einem anderen wird dieses automatisch in die
richtige Einheit konvertiert. Es ist nicht notwendig
convertTo() aufzurufen
bevor unterschiedliche Einheiten addiert werden.
Subtrahieren
Das Subtrahieren von Maßeinheiten funktioniert genauso wie das Addieren.
sub($unit2);
echo $sum;
]]>Identität Vergleichen
Maßeinheiten können genauso verglichen werden, aber ohne automatische Konvertierung. Das
bedeutet das equals() nur dann TRUE zurückgibt wenn beide,
sowohl der Wert als auch die Einheit identisch sind.
Unterschiedliche Maßeinheitenequals($unit2)) {
print "Beide Maßeinheiten sind identisch";
} else {
print "Das sind unterschiedliche Maßeinheiten";
}
]]>Identische MaßeinheitensetType(Zend_Measure_Length::CENTIMETER);
if ($unit->equals($unit2)) {
print "Beide Maßeinheiten sind identisch";
} else {
print "Das sind unterschiedliche Maßeinheiten";
}
]]>Werte Vergleichen
Um herauszufinden ob eine Maßeinheite kleiner oder größer als eine andere ist kann
compare() verwendet werden, was 0, -1 oder 1 zurückgibt, abhängig von der
Differenz zwischen den zwei Objekten. Identische Maßeinheiten geben 0 zurück, kleinere
einen negativen, und größere einen positiven Wert.
Differenzcompare($unit);
print "Kleiner:".$unit2->compare($unit3);
print "Größer:".$unit3->compare($unit2);
]]>Werte per Hand ändern
Um den Wert einer Maßeinheit explizit zu Ändern, kann setValue() verwendet
werden um den aktuellen Wert zu überschreiben. Die Parameter sind identisch mit denen
des Konstruktors.
Verändern eines WertessetValue(1.2);
echo $unit;
$unit->setValue(1.2, Zend_Measure_Length::KILOMETER);
echo $unit;
$unit->setValue("1.234,56", Zend_Measure_Length::MILLIMETER,$locale);
echo $unit;
]]>Typ per Hand ändern
Um den Typ einer Maßeinheit ohne den Wert zu verändern kann setType()
verwendet werden.
Verändern des TypssetType(Zend_Measure_Length::KILOMETER);
echo $unit; // Ausgabe "1000 km"
]]>