<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 17175 -->
<!-- Reviewed: no -->
<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 language="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 <acronym>PHP</acronym> 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 <acronym>PHP</acronym>, telle que <ulink
            url="http://php.net/bin2dec"><methodname>bin2dec()</methodname></ulink>.
        </para>

        <example id="zend.measure.creation.string.example-1">
            <title>Création de mesure en utilisant des chaînes</title>

            <programlisting language="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 language="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 language="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 language="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>