| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <!-- EN-Revision: 12150 -->
- <sect1 id="zend.measure.creation">
- <title>Création d'une mesure</title>
- <para>En créant un objet de mesure, les méthodes <classname>Zend_Measure_*</classname> prévoient que l'entrée ou la mesure
- originale soit le premier paramètre. Ceci peut être un <link linkend="zend.measure.creation.number"><code>argument
- numérique</code></link>, une <link linkend="zend.measure.creation.string"><code>chaîne</code></link> sans unités, ou
- une <link linkend="zend.measure.creation.localized"><code>chaîne régionale</code></link> avec une (des) unité(s)
- spécifiée(s). Le deuxième paramètre définit le type de la mesure. Les deux paramètres sont obligatoires. La langue
- peut être indiquée comme troisième paramètre optionnel.</para>
- <sect2 id="zend.measure.creation.number">
- <title>Créer des mesures à partir de nombres entiers et décimaux</title>
- <para>En plus des valeurs de données en nombre entier, des nombre décimaux peuvent être employés, mais <ulink
- url="http://www.php.net/float">"il est fréquent que de simples fractions décimales telles que 0.1 ou 0.7 ne
- puissent être converties au format interne binaire sans une légère perte de précision"</ulink> parfois en
- donnant des résultats étonnants. En outre, il ne faut pas comparer l'égalité de deux nombres décimaux.</para>
- <example id="zend.measure.creation.number.example-1">
- <title>Création de mesure en utilisant des nombres entiers et décimaux</title>
- <programlisting role="php"><![CDATA[
- $mesure = 1234.7;
- $unite = new Zend_Measure_Length((integer)$mesure,
- Zend_Measure_Length::STANDARD);
- echo $unite;
- // affiche '1234 m' (mètres)
- $unite = new Zend_Measure_Length($mesure, Zend_Measure_Length::STANDARD);
- echo $unite;
- // affiche '1234.7 m' (mètres)
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.measure.creation.string">
- <title>Créer des mesures à partir de chaînes de caractères</title>
- <para>Beaucoup de mesures reçues comme entrée des applications Zend Framework peuvent seulement être passées aux classes
- <classname>Zend_Measure_*</classname> comme des chaînes, telles que des nombres écrits en utilisant les <ulink
- url="http://fr.wikipedia.org/wiki/Num%C3%A9ration_romaine">chiffres romains</ulink> ou les valeurs binaires
- extrêmement grandes qui excèdent la précision native de PHP des nombres entiers ou décimaux. Puisque les nombres
- entiers peuvent être indiqués en utilisant des chaînes, s'il y a un quelconque risque de perdre la précision à
- cause des limitations des types natifs (nombre entier et décimaux), il faut utiliser des chaînes à la place.
- <classname>Zend_Measure_Number</classname> emploie l'extension BCMath pour supporter la précision arbitraire, afin
- d'éviter les limitations dans beaucoup de fonctions de PHP, telle que <ulink
- url="http://php.net/bin2dec"><code>bin2dec()</code></ulink>.</para>
- <example id="zend.measure.creation.string.example-1">
- <title>Création de mesure en utilisant des chaînes</title>
- <programlisting role="php"><![CDATA[
- $machaine = "10010100111010111010100001011011101010001";
- $unit = new Zend_Measure_Number($machaine, Zend_Measure_Number::BINARY);
- echo $unit;
- ]]></programlisting>
- </example>
- <para>Habituellement, <classname>Zend_Measure_*</classname> peut automatiquement extraire la mesure désirée incluse dans
- une chaîne arbitraire. Seulement le premier nombre identifiable, indiqué en utilisant les chiffres
- 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
- des chiffres plus loin dans la chaîne, ceux-ci seront ignorés.</para>
- <example id="zend.measure.creation.string.example-2">
- <title>Saisie de texte arbitraire contenant des mesures</title>
- <programlisting role="php"><![CDATA[
- $machaine = "Ma maison a une superficie de 125m².";
- $unite = new Zend_Measure_Area($machaine, Zend_Measure_Area::STANDARD);
- echo $unite; // affiche "125 m²";
- $machaine = "Ma maison a une superficie de 125m²,"
- . " elle comprend 5 pièces de 25m² chacune.";
- $unite = new Zend_Measure_Area($machaine, Zend_Measure_Area::STANDARD);
- echo $unite; // affiche "125 m² in size";
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.measure.creation.localized">
- <title>Mesures à partir de chaînes localisées</title>
- <para>Quand une corde est présentée dans une notation régionalisée, l'interprétation correcte ne peut pas être
- déterminée sans connaître la région attendue. La division des chiffres décimaux avec "." et grouper des milliers
- avec "," est commun en l'anglais, mais pas dans d'autres langues. Par exemple, le nombre anglais "1,234.50"
- serait interprété comme "1.2345" en allemand. Pour traiter de tels problèmes, la famille des classes
- <classname>Zend_Measure_*</classname> offrent la possibilité d'indiquer une langue ou une région pour lever l'ambiguïté
- les données d'entrée et pour interpréter correctement la valeur sémantique prévue.</para>
- <example id="zend.measure.creation.localized.example-1">
- <title>Chaînes localisées</title>
- <programlisting role="php"><![CDATA[
- $locale = new Zend_Locale('de');
- $machaine = "The boat is 1,234.50 long.";
- $unite = new Zend_Measure_Length($machaine,
- Zend_Measure_Length::STANDARD, $locale);
- echo $unite; // affiche "1.234 m"
- $machaine = "The boat is 1,234.50 long.";
- $unite = new Zend_Measure_Length($machaine,
- Zend_Measure_Length::STANDARD, 'en_US');
- echo $unite; // affiche "1234.50 m"
- ]]></programlisting>
- </example>
- <para>Depuis la version 1.7.0 de Zend Framework, <classname>Zend_Measure</classname> supporte aussi l'utilisation d'une
- application pleinement localisée. Vous pouvez simplement paramétrer une instance <classname>Zend_Locale</classname> dans
- le registre comme présenté ci-dessous. Avec cette notation vous pouvez ne pas paramétrer cette valeur
- manuellement à chaque fois quand vous utilisez la même localisation plusieurs fois.</para>
- <programlisting role="php"><![CDATA[
- // in your bootstrap file
- $locale = new Zend_Locale('de_AT');
- Zend_Registry::set('Zend_Locale', $locale);
- // somewhere in your application
- $length = new Zend_Measure_Length(Zend_Measure_Length::METER();
- ]]></programlisting>
- </sect2>
- </sect1>
|