2
0

Zend_Measure-Creation.xml 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.measure.creation">
  5. <title>Erstellung einer Maßeinheit</title>
  6. <para>
  7. Bei der Erstellung einer Maßeinheit erwarten die <classname>Zend_Measure_*</classname>
  8. Methoden den Eingabe-/den Originalwert als ersten Parameter. Dieser kann ein
  9. <link linkend="zend.measure.creation.number">nummerisches Argument</link>, einen
  10. <link linkend="zend.measure.creation.string"><type>String</type></link> oder Einheit, oder
  11. eine <link linkend="zend.measure.creation.localized">lokalisierte Zeichenkette mit
  12. definierter Einheit</link> sein. Der zweite Parameter definiert die Art der Maßeinheit.
  13. Beide Parameter sind zwingend erforderlich. Die Sprache kann als optionaler dritter
  14. Parameter definiert werden.
  15. </para>
  16. <sect2 id="zend.measure.creation.number">
  17. <title>Eine Maßeinheit von einer Integer oder Floatzahl erstellen</title>
  18. <para>
  19. Zusätzlich zu Integerwerten können Floatwerte benutzt werden, aber
  20. <ulink url="http://www.php.net/float">"einfache Dezimalbrüche wie 0.1 or 0.7 können
  21. nicht in Ihre binäre Entsprechung konvertiert werden ohne den Verlust von
  22. Genauigkeit,"</ulink> was zeitweise zu erstaunlichen Ergebnissen führt. Genauso sollten
  23. zwei Floatzahlen nicht auf Gleichheit geprüft werden.
  24. </para>
  25. <example id="zend.measure.creation.number.example-1">
  26. <title>Erstellung einer Maßeinheit durch Integer oder Floatwerte</title>
  27. <programlisting language="php"><![CDATA[
  28. $measurement = 1234.7;
  29. $unit = new Zend_Measure_Length((integer)$measurement,
  30. Zend_Measure_Length::STANDARD);
  31. echo $unit;
  32. // Ausgabe '1234 m' (Meter)
  33. $unit = new Zend_Measure_Length($measurement, Zend_Measure_Length::STANDARD);
  34. echo $unit;
  35. // Ausgabe '1234.7 m' (Meter)
  36. ]]></programlisting>
  37. </example>
  38. </sect2>
  39. <sect2 id="zend.measure.creation.string">
  40. <title>Erstellen einer Maßeinheit aus Zeichenketten</title>
  41. <para>
  42. Viele Maßeinheiten die als Eingabe einer Zend Framework Anwendung empfangen werden
  43. können nur als Zeichenketten den Klassen von <classname>Zend_Measure_*</classname>
  44. übergeben werden, wie z.B. Zahlen die in <ulink
  45. url="http://en.wikipedia.org/wiki/Roman_numerals">Römischer Schreibweise</ulink>
  46. geschrieben werden, oder extrem lange Binärwerte welche die Genauigkeit von
  47. <acronym>PHP</acronym>'s natürlichen Integer und Floattypen übersteigen würden. Da
  48. Integer auch als Zeichenketten geschrieben werden können sollten, sobald die Gefahr
  49. eines Genauigkeitverlustes durch die Limits von <acronym>PHP</acronym>'s Integer und
  50. Floatwerten besteht, stattdessen Zeichenketten verwendet werden.
  51. <classname>Zend_Measure_Number</classname> benutzt die BCMath Erweiterung um
  52. aussergewöhnliche Genauigkeit zu unterstützen, wie im gezeigen Beispiel, um die
  53. Beschränkungen von vielen <acronym>PHP</acronym> Funktionen wie <ulink
  54. url="http://php.net/bin2dec"><methodname>bin2dec()</methodname></ulink> zu umgehen.
  55. </para>
  56. <example id="zend.measure.creation.string.example-1">
  57. <title>Erstellung einer Maßeinheit durch Strings</title>
  58. <programlisting language="php"><![CDATA[
  59. $mystring = "10010100111010111010100001011011101010001";
  60. $unit = new Zend_Measure_Number($mystring, Zend_Measure_Number::BINARY);
  61. echo $unit;
  62. ]]></programlisting>
  63. </example>
  64. </sect2>
  65. <sect2 id="zend.measure.creation.localized">
  66. <title>Maßeinheiten von lokalisierten Zeichenketten</title>
  67. <para>
  68. Wenn eine Zeichenkette in lokalisierter Schreibweise eingegeben wurde, kann die richtige
  69. Interpretation nicht herausgefunden werden ohne dass das gewünschte Gebietsschema
  70. bekannt ist. Die Teilung der Dezimalziffern mit "." und die Gruppierung der Tausender
  71. mit "," ist in der Englischen Sprache üblich, aber nur in anderen Sprachen. Um mit
  72. solchen Problemen umgehen zu können, besteht bei den lokalisierten Klassen der
  73. <classname>Zend_Measure_*</classname> Familie die Möglichkeit eine Sprache oder Region
  74. anzugeben, um einen Eingabewert eindeutig zu machen und die erwartete semantische
  75. Eingabe richtig zu interpretieren.
  76. </para>
  77. <example id="zend.measure.creation.localized.example-1">
  78. <title>Lokalisierte Zeichenketten</title>
  79. <programlisting language="php"><![CDATA[
  80. $locale = new Zend_Locale('de');
  81. $mystring = "1,234.50";
  82. $unit = new Zend_Measure_Length($mystring,
  83. Zend_Measure_Length::STANDARD,
  84. $locale);
  85. echo $unit; // Ausgabe "1.234 m"
  86. $mystring = "1,234.50";
  87. $unit = new Zend_Measure_Length($mystring,
  88. Zend_Measure_Length::STANDARD,
  89. 'en_US');
  90. echo $unit; // Ausgabe "1234.50 m"
  91. ]]></programlisting>
  92. </example>
  93. <para>
  94. Seit Zend Framework 1.7.0 unterstützt <classname>Zend_Measure</classname> auch die
  95. Verwendung eines Anwendungsweiten Gebietsschemas. Man kann ganz einfach eine
  96. <classname>Zend_Locale</classname> Instanz in der Registry setzen wie anbei gezeigt. Mit
  97. dieser Schreibweise kann man das manuelle Setzen eines Gebietsschemas für jede Instanz
  98. vergessen wenn man das selbe Gebietsschema mehrere Male verwenden will.
  99. </para>
  100. <programlisting language="php"><![CDATA[
  101. // In der Bootstrap Datei
  102. $locale = new Zend_Locale('de_AT');
  103. Zend_Registry::set('Zend_Locale', $locale);
  104. // Irgendwo in der eigenen Anwendung
  105. $length = new Zend_Measure_Length(Zend_Measure_Length::METER();
  106. ]]></programlisting>
  107. </sect2>
  108. </sect1>