Zend_Measure-Creation.xml 6.6 KB

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