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.
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'.
Beispiel 586. Konvertieren
$locale = new Zend_Locale('de'); $mystring = "1.234.567,89"; $unit = new Zend_Measure_Weight($mystring,'POND', $locale); print "Kilo:".$unit->convertTo('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);
Maßeinheiten können miteinander durch add()
addiert und durch
sub()
subtrahiert werden. Das Ergebnis 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.
Beispiel 587. Werte addieren
// Objekte definieren $unit = new Zend_Measure_Length(200, Zend_Measure_Length::CENTIMETER); $unit2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); // $unit2 zu $unit1 addieren $sum = $unit->add($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.
Beispiel 588. Subtrahieren
Das Subtrahieren von Maßeinheiten funktioniert genauso wie das Addieren.
// Objekte definieren $unit = new Zend_Measure_Length(200, Zend_Measure_Length::CENTIMETER); $unit2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); // $unit2 von $unit subtrahieren $sum = $unit->sub($unit2); echo $sum;
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.
Beispiel 589. Unterschiedliche Maßeinheiten
// Maßeinheiten definieren $unit = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER); $unit2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); if ($unit->equals($unit2)) { print "Beide Maßeinheiten sind identisch"; } else { print "Das sind unterschiedliche Maßeinheiten"; }
Beispiel 590. Identische Maßeinheiten
// Maßeinheiten definieren $unit = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER); $unit2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); $unit2->setType(Zend_Measure_Length::CENTIMETER); if ($unit->equals($unit2)) { print "Beide Maßeinheiten sind identisch"; } else { print "Das sind unterschiedliche Maßeinheiten"; }
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.
Beispiel 591. Differenz
$unit = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER); $unit2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); $unit3 = new Zend_Measure_Length(1.2, Zend_Measure_Length::METER); print "Gleich:".$unit2->compare($unit); print "Kleiner:".$unit2->compare($unit3); print "Größer:".$unit3->compare($unit2);
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.
Beispiel 592. Verändern eines Wertes
$locale = new Zend_Locale('de_AT'); $unit = new Zend_Measure_Length(1,Zend_Measure_Length::METER); $unit->setValue(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;