|
|
Bei der Erstellung einer Maßeinheit erwarten die Zend_Measure_*
Methoden den Eingabe-/den Originalwert als ersten Parameter. Dieser kann ein
nummerisches Argument, eine
Zeichenkette oder
Einheit, oder eine lokalisierte
Zeichenkette mit definierter Einheit sein. Der zweite Parameter definiert die
Art der Maßeinheit. Beide Parameter sind zwingend erforderlich. Die Sprache kann als
optionaler dritter Parameter definiert werden.
Zusätzlich zu Integerwerten können Floatwerte benutzt werden, aber » "einfache Dezimalbrüche wie 0.1 or 0.7 können nicht in Ihre binäre Entsprechung konvertiert werden ohne den Verlust von Genauigkeit," was zeitweise zu erstaunlichen Ergebnissen führt. Genauso sollten zwei Floatzahlen nicht auf Gleichheit geprüft werden.
Example #1 Erstellung einer Maßeinheit durch Integer oder Floatwerte
$measurement = 1234.7;
$unit = new Zend_Measure_Length((integer)$measurement,
Zend_Measure_Length::STANDARD);
echo $unit;
// Ausgabe '1234 m' (Meter)
$unit = new Zend_Measure_Length($measurement, Zend_Measure_Length::STANDARD);
echo $unit;
// Ausgabe '1234.7 m' (Meter)
Viele Maßeinheiten die als Eingabe einer Zend Framework Anwendung empfangen werden
können nur als Zeichenketten den Klassen von Zend_Measure_*
übergeben werden, wie z.B. Zahlen die in » Römischer Schreibweise
geschrieben werden, oder extrem lange Binärwerte die die Genauigkeit von PHP's
natürlichen Integer und Floattypen übersteigen würden. Da Integer auch als Zeichenketten
geschrieben werden können sollten, sobald die Gefahr eines Genauigkeitverlustes durch
die Limits von PHP's Integer und Floatwerten besteht, stattdessen Zeichenketten
verwendet werden. Zend_Measure_Number benutzt die BCMath
Erweiterung um aussergewöhnliche Genauigkeit zu unterstützen, wie im gezeigen Beispiel,
um die Beschränkungen von vielen PHP Funktionen wie » bin2dec() zu umgehen.
Example #2 Erstellung einer Maßeinheit durch Strings
$mystring = "10010100111010111010100001011011101010001"; $unit = new Zend_Measure_Number($mystring, Zend_Measure_Number::BINARY); echo $unit;
Normalerweise kann Zend_Measure_* automatisch die gewünschte
Maßeinheit aus einer gewöhnlichen Zeichenkette extrahieren. Nur die erste
identifizierbare Zahl die Standard Europäisch/Lateinische Ziffern (0,1,2,3,4,5,6,7,8,9)
benutzt wird für die Erstellung der Maßeinheit benutzt. Wenn weitere Zahlen in der
Zeichenkette enthalten sind, werden diese Ignoriert.
Example #3 Gewöhliche Texteingaben welche Maßeinheiten beinhalten
$mystring = "Mein Haus ist 125m² groß"; $unit = new Zend_Measure_Area($mystring, Zend_Measure_Area::STANDARD); echo $unit; // Ausgabe "125 m²"; $mystring = "Mein Haus ist 125m² groß, es hat 5 Räume mit jeweils 25m²."; $unit = new Zend_Measure_Area($mystring, Zend_Measure_Area::STANDARD); echo $unit; // Ausgabe "125 m²";
Wenn eine Zeichenkette in lokalisierter Schreibweise eingegeben wurde, kann die richtige
Interpretation nicht herausgefunden werden ohne das das gewünschte Gebietsschema bekannt
ist. Die Teilung der Dezimalziffern mit "." und die Gruppierung der Tausender mit ","
ist in der Englischen Sprache üblich, aber nur in anderen Sprachen. Um mit solchen
Problemen umgehen zu können, besteht bei den lokalisierten Klassen der
Zend_Measure_* Familie die Möglichkeit eine Sprache oder Region
anzugeben, um einen Eingabewert eindeutig zu machen und die erwartete semantische
Eingabe richtig zu interpretieren.
Example #4 Lokalisierte Zeichenketten
$locale = new Zend_Locale('de');
$mystring = "Das Boot ist 1,234.50 lang.";
$unit = new Zend_Measure_Length($mystring,
Zend_Measure_Length::STANDARD,
$locale);
echo $unit; // Ausgabe "1.234 m"
$mystring = "Das Boot ist 1,234.50 lang.";
$unit = new Zend_Measure_Length($mystring,
Zend_Measure_Length::STANDARD,
'en_US');
echo $unit; // Ausgabe "1234.50 m"
Seit Zend Framework 1.7.0 unterstützt Zend_Measure auch die
Verwendung eines Anwendungsweiten Gebietsschemas. Man kann ganz einfach eine
Zend_Locale Instanz in der Registry setzen wie anbei gezeigt. Mit
dieser Schreibweise kann man das manuelle Setzen eines Gebietsschemas für jede Instanz
vergessen wenn man das selbe Gebietsschema mehrere Male verwenden will.
// In der Bootstrap Datei
$locale = new Zend_Locale('de_AT');
Zend_Registry::set('Zend_Locale', $locale);
// Irgendwo in der eigenen Anwendung
$length = new Zend_Measure_Length(Zend_Measure_Length::METER();
|
|
Copyright © 2005-2011 Zend Technologies Inc (compiled by mikaelkael with ZFDocumentor - SVN 18616).

