| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.measure.creation">
- <title>Erstellung einer Maßeinheit</title>
- <para>
- Bei der Erstellung einer Maßeinheit erwarten die <classname>Zend_Measure_*</classname>
- Methoden den Eingabe-/den Originalwert als ersten Parameter. Dieser kann ein
- <link linkend="zend.measure.creation.number">nummerisches Argument</link>, einen
- <link linkend="zend.measure.creation.string"><type>String</type></link> oder Einheit, oder
- eine <link linkend="zend.measure.creation.localized">lokalisierte Zeichenkette mit
- definierter Einheit</link> sein. Der zweite Parameter definiert die Art der Maßeinheit.
- Beide Parameter sind zwingend erforderlich. Die Sprache kann als optionaler dritter
- Parameter definiert werden.
- </para>
- <sect2 id="zend.measure.creation.number">
- <title>Eine Maßeinheit von einer Integer oder Floatzahl erstellen</title>
- <para>
- Zusätzlich zu Integerwerten können Floatwerte benutzt werden, aber
- <ulink url="http://www.php.net/float">"einfache Dezimalbrüche wie 0.1 or 0.7 können
- nicht in Ihre binäre Entsprechung konvertiert werden ohne den Verlust von
- Genauigkeit,"</ulink> was zeitweise zu erstaunlichen Ergebnissen führt. Genauso sollten
- zwei Floatzahlen nicht auf Gleichheit geprüft werden.
- </para>
- <example id="zend.measure.creation.number.example-1">
- <title>Erstellung einer Maßeinheit durch Integer oder Floatwerte</title>
- <programlisting language="php"><![CDATA[
- $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)
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.measure.creation.string">
- <title>Erstellen einer Maßeinheit aus Zeichenketten</title>
- <para>
- Viele Maßeinheiten die als Eingabe einer Zend Framework Anwendung empfangen werden
- können nur als Zeichenketten den Klassen von <classname>Zend_Measure_*</classname>
- übergeben werden, wie z.B. Zahlen die in <ulink
- url="http://en.wikipedia.org/wiki/Roman_numerals">Römischer Schreibweise</ulink>
- geschrieben werden, oder extrem lange Binärwerte welche die Genauigkeit von
- <acronym>PHP</acronym>'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 <acronym>PHP</acronym>'s Integer und
- Floatwerten besteht, stattdessen Zeichenketten verwendet werden.
- <classname>Zend_Measure_Number</classname> benutzt die BCMath Erweiterung um
- aussergewöhnliche Genauigkeit zu unterstützen, wie im gezeigen Beispiel, um die
- Beschränkungen von vielen <acronym>PHP</acronym> Funktionen wie <ulink
- url="http://php.net/bin2dec"><methodname>bin2dec()</methodname></ulink> zu umgehen.
- </para>
- <example id="zend.measure.creation.string.example-1">
- <title>Erstellung einer Maßeinheit durch Strings</title>
- <programlisting language="php"><![CDATA[
- $mystring = "10010100111010111010100001011011101010001";
- $unit = new Zend_Measure_Number($mystring, Zend_Measure_Number::BINARY);
- echo $unit;
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.measure.creation.localized">
- <title>Maßeinheiten von lokalisierten Zeichenketten</title>
- <para>
- Wenn eine Zeichenkette in lokalisierter Schreibweise eingegeben wurde, kann die richtige
- Interpretation nicht herausgefunden werden ohne dass 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
- <classname>Zend_Measure_*</classname> Familie die Möglichkeit eine Sprache oder Region
- anzugeben, um einen Eingabewert eindeutig zu machen und die erwartete semantische
- Eingabe richtig zu interpretieren.
- </para>
- <example id="zend.measure.creation.localized.example-1">
- <title>Lokalisierte Zeichenketten</title>
- <programlisting language="php"><![CDATA[
- $locale = new Zend_Locale('de');
- $mystring = "1,234.50";
- $unit = new Zend_Measure_Length($mystring,
- Zend_Measure_Length::STANDARD,
- $locale);
- echo $unit; // Ausgabe "1.234 m"
- $mystring = "1,234.50";
- $unit = new Zend_Measure_Length($mystring,
- Zend_Measure_Length::STANDARD,
- 'en_US');
- echo $unit; // Ausgabe "1234.50 m"
- ]]></programlisting>
- </example>
- <para>
- Seit Zend Framework 1.7.0 unterstützt <classname>Zend_Measure</classname> auch die
- Verwendung eines Anwendungsweiten Gebietsschemas. Man kann ganz einfach eine
- <classname>Zend_Locale</classname> 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.
- </para>
- <programlisting language="php"><![CDATA[
- // 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();
- ]]></programlisting>
- </sect2>
- </sect1>
|