Erstellung einer Maßeinheit
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
ohne 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.
Eine Maßeinheit von einer Integer oder Floatzahl erstellen
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.
Erstellung einer Maßeinheit durch Integer oder FloatwerteErstellen einer Maßeinheit aus Zeichenketten
Viele Maßeinheiten die als Eingabe einer ZF 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.
Erstellung einer Maßeinheit durch Strings
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.
Gewöhliche Texteingaben welche Maßeinheiten beinhaltenMaßeinheiten von lokalisierten Zeichenketten
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.
Lokalisierte Zeichenketten
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.