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.
Beispiel 21.10. Konvertieren
<?php require_once 'Zend/Measure/Weight.php'; $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); ?>
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.
Beispiel 21.11. Werte addieren
<?php require_once 'Zend/Measure/Length.php'; // 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
|
Beispiel 21.12. Subtrahieren
Das Subtrahieren von Maßeinheiten funktioniert genauso wie das Addieren.
<?php require_once 'Zend/Measure/Length.php'; // 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 21.13. Unterschiedliche Maßeinheiten
<?php require_once 'Zend/Measure/Length.php'; // 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 21.14. Identische Maßeinheiten
<?php require_once 'Zend/Measure/Length.php'; // 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 21.15. Differenz
<?php require_once 'Zend/Measure/Length.php'; $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 21.16. Verändern eines Wertes
<?php require_once 'Zend/Measure/Length.php'; $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; ?>
Um den Typ einer Maßeinheit ohne den Wert zu verändern kann setType()
verwendet werden.