Zend_Measure-Creation.xml 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.measure.creation">
  5. <title>Création d'une mesure</title>
  6. <para>
  7. En créant un objet de mesure, les méthodes <classname>Zend_Measure_*</classname>
  8. prévoient que l'entrée ou la mesure originale soit le premier paramètre. Ceci peut être un
  9. <link linkend="zend.measure.creation.number">argument numérique</link>, une
  10. <link linkend="zend.measure.creation.string"><type>chaîne</type></link> sans unités, ou une
  11. <link linkend="zend.measure.creation.localized">chaîne régionale</link> avec
  12. une (des) unité(s) spécifiée(s). Le deuxième paramètre définit le type de la mesure. Les
  13. deux paramètres sont obligatoires. La langue peut être indiquée comme troisième paramètre
  14. optionnel.
  15. </para>
  16. <sect2 id="zend.measure.creation.number">
  17. <title>Créer des mesures à partir de nombres entiers et décimaux</title>
  18. <para>
  19. En plus des valeurs de données en nombre entier, des nombre décimaux peuvent être
  20. employés, mais <ulink url="http://www.php.net/float">"il est fréquent que de simples
  21. fractions décimales telles que 0.1 ou 0.7 ne puissent être converties au format interne
  22. binaire sans une légère perte de précision"</ulink> parfois en donnant des résultats
  23. étonnants. En outre, il ne faut pas comparer l'égalité de deux nombres décimaux.
  24. </para>
  25. <example id="zend.measure.creation.number.example-1">
  26. <title>Création de mesure en utilisant des nombres entiers et décimaux</title>
  27. <programlisting language="php"><![CDATA[
  28. $mesure = 1234.7;
  29. $unite = new Zend_Measure_Length((integer)$mesure,
  30. Zend_Measure_Length::STANDARD);
  31. echo $unite;
  32. // affiche '1234 m' (mètres)
  33. $unite = new Zend_Measure_Length($mesure, Zend_Measure_Length::STANDARD);
  34. echo $unite;
  35. // affiche '1234.7 m' (mètres)
  36. ]]></programlisting>
  37. </example>
  38. </sect2>
  39. <sect2 id="zend.measure.creation.string">
  40. <title>Créer des mesures à partir de chaînes de caractères</title>
  41. <para>
  42. Beaucoup de mesures reçues comme entrée des applications Zend Framework peuvent
  43. seulement être passées aux classes <classname>Zend_Measure_*</classname> comme des
  44. chaînes, telles que des nombres écrits en utilisant les <ulink
  45. url="http://fr.wikipedia.org/wiki/Num%C3%A9ration_romaine">chiffres romains</ulink> ou
  46. les valeurs binaires extrêmement grandes qui excèdent la précision native de <acronym>PHP</acronym> des
  47. nombres entiers ou décimaux. Puisque les nombres entiers peuvent être indiqués en
  48. utilisant des chaînes, s'il y a un quelconque risque de perdre la précision à cause des
  49. limitations des types natifs (nombre entier et décimaux), il faut utiliser des chaînes à
  50. la place. <classname>Zend_Measure_Number</classname> emploie l'extension BCMath pour
  51. supporter la précision arbitraire, afin d'éviter les limitations dans beaucoup de
  52. fonctions de <acronym>PHP</acronym>, telle que <ulink
  53. url="http://php.net/bin2dec"><methodname>bin2dec()</methodname></ulink>.
  54. </para>
  55. <example id="zend.measure.creation.string.example-1">
  56. <title>Création de mesure en utilisant des chaînes</title>
  57. <programlisting language="php"><![CDATA[
  58. $machaine = "10010100111010111010100001011011101010001";
  59. $unit = new Zend_Measure_Number($machaine, Zend_Measure_Number::BINARY);
  60. echo $unit;
  61. ]]></programlisting>
  62. </example>
  63. </sect2>
  64. <sect2 id="zend.measure.creation.localized">
  65. <title>Mesures à partir de chaînes localisées</title>
  66. <para>
  67. Quand une corde est présentée dans une notation régionalisée, l'interprétation
  68. correcte ne peut pas être déterminée sans connaître la région attendue. La division des
  69. chiffres décimaux avec "." et grouper des milliers avec "," est commun en l'anglais,
  70. mais pas dans d'autres langues. Par exemple, le nombre anglais "1,234.50" serait
  71. interprété comme "1.2345" en allemand. Pour traiter de tels problèmes, la famille des
  72. classes <classname>Zend_Measure_*</classname> offrent la possibilité d'indiquer une
  73. langue ou une région pour lever l'ambiguïté les données d'entrée et pour interpréter
  74. correctement la valeur sémantique prévue.
  75. </para>
  76. <example id="zend.measure.creation.localized.example-1">
  77. <title>Chaînes localisées</title>
  78. <programlisting language="php"><![CDATA[
  79. $locale = new Zend_Locale('de');
  80. $machaine = "1,234.50";
  81. $unite = new Zend_Measure_Length($machaine,
  82. Zend_Measure_Length::STANDARD, $locale);
  83. echo $unite; // affiche "1.234 m"
  84. $machaine = "1,234.50";
  85. $unite = new Zend_Measure_Length($machaine,
  86. Zend_Measure_Length::STANDARD, 'en_US');
  87. echo $unite; // affiche "1234.50 m"
  88. ]]></programlisting>
  89. </example>
  90. <para>
  91. Depuis la version 1.7.0 de Zend Framework, <classname>Zend_Measure</classname>
  92. supporte aussi l'utilisation d'une application pleinement localisée. Vous pouvez
  93. simplement paramétrer une instance <classname>Zend_Locale</classname> dans le registre
  94. comme présenté ci-dessous. Avec cette notation vous pouvez ne pas paramétrer cette
  95. valeur manuellement à chaque fois quand vous utilisez la même localisation plusieurs
  96. fois.
  97. </para>
  98. <programlisting language="php"><![CDATA[
  99. // in your bootstrap file
  100. $locale = new Zend_Locale('de_AT');
  101. Zend_Registry::set('Zend_Locale', $locale);
  102. // somewhere in your application
  103. $length = new Zend_Measure_Length(Zend_Measure_Length::METER();
  104. ]]></programlisting>
  105. </sect2>
  106. </sect1>