<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.measure.edit">
    <title>Manipuler des mesures</title>

    <para>
        L'analyse et la normalisation de l'entrée, combinées avec la récupération suivant les
        notations régionalisées rend des données accessibles aux utilisateurs dans différentes
        régions. Beaucoup de méthodes additionnelles existent dans les composants
        <classname>Zend_Measure_*</classname> pour manipuler et travailler ces données, après
        qu'elles aient été normalisées.
    </para>

    <itemizedlist>
        <listitem>
            <para><link linkend="zend.measure.edit.convert">Convertir</link></para>
        </listitem>

        <listitem>
            <para>
                <link linkend="zend.measure.edit.add">Ajouter et soustraire</link>
            </para>
        </listitem>

        <listitem>
            <para>
                <link linkend="zend.measure.edit.equal">Comparer avec un booléen</link>
            </para>
        </listitem>

        <listitem>
            <para>
                <link linkend="zend.measure.edit.compare">Comparer "plus/moins grand
                que"</link>
            </para>
        </listitem>

        <listitem>
            <para>
                <link linkend="zend.measure.edit.changevalue">Changer manuellement des
                valeurs</link>
            </para>
        </listitem>

        <listitem>
            <para>
                <link linkend="zend.measure.edit.changetype">Changer manuellement de
                type</link>
            </para>
        </listitem>
    </itemizedlist>

    <sect2 id="zend.measure.edit.convert">
        <title>Convertir</title>

        <para>
            Le dispositif le plus important est probablement la conversion dans différentes
            unités de la mesure. La conversion d'une unité peut être faite à tout moment en
            utilisant la méthode <methodname>convertTo()</methodname>. Des unités de mesure peuvent seulement
            être converties en d'autres unités du même type (classe). Par conséquent, il n'est pas
            possible de convertir (par exemple : une longueur en poids), qui encouragerait des
            pratiques de programmation pauvres et entraînerait la propagation d'erreurs sans lever
            d'exception.
        </para>

        <para>
            La méthode <methodname>convertTo()</methodname> accepte un paramètre facultatif. Avec ce
            paramètre vous pouvez définir une précision pour l'élément retourné. La précision par
            défaut est "2".
        </para>

        <example id="zend.measure.edit.convert.example-1">
            <title>Convertir</title>

            <programlisting language="php"><![CDATA[
$locale = new Zend_Locale('de');
$machaine = "1.234.567,89";
$unite = new Zend_Measure_Weight($machaine,'POND', $locale);

print "Kilo : ".$unite->convertTo('KILOGRAM');
// affiche "Kilo : 617283.945 kg"

// l'utilisation de constantes est considérée comme
// une meilleure pratique que les chaînes
print "Tonne : ".$unite->convertTo(Zend_Measure_Weight::TON);
// affiche "Tonne : 617.283945 t"

// définition de la précision pour l'affichage
print "Tonne :".$unit->convertTo(Zend_Measure_Weight::TON, 3);
]]></programlisting>
        </example>
    </sect2>

    <sect2 id="zend.measure.edit.add">
        <title>Ajouter et soustraire</title>

        <para>
            Les mesures peuvent être ajoutées en utilisant <methodname>add()</methodname> et
            soustraites en utilisant <methodname>sub()</methodname>. Le résultat sera du même type
            que l'objet original. Les objets dynamiques supportent un interface fluide de
            programmation, où des ordres complexes d'opération peuvent être imbriqués sans risque
            d'effets secondaires changeant les objets d'entrée.
        </para>

        <para>
            <example id="zend.measure.edit.add.example-1">
                    <title>Ajouter des mesures</title>

                    <programlisting language="php"><![CDATA[
// Définition des objets
$unite1 = new Zend_Measure_Length(200, Zend_Measure_Length::CENTIMETER);
$unite2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER);

// ajouter l'$unite2 à l'$unite1
$somme = $unite1->add($unite2);

echo $somme; // affiche "300 cm"
]]></programlisting>
                </example>
            </para>

        <note>
            <title>Conversion automatique</title>

            <para>
                Ajouter un objet à l'autre le convertira automatiquement dans l'unité
                correcte. Il n'est pas nécessaire d'appeler <link
                linkend="zend.measure.edit.convert"><methodname>convertTo()</methodname></link> avant d'ajouter
                des unités différentes.
            </para>
        </note>

        <para>
            <example id="zend.measure.edit.add.example-2">
                    <title>Soustraire des mesures</title>

                    <para>La soustraction des mesures fonctionne comme l'addition.</para>

                    <programlisting language="php"><![CDATA[
// Définition des objets
$unite1 = new Zend_Measure_Length(200, Zend_Measure_Length::CENTIMETER);
$unite2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER);

// soustriare l'$unite2 de l'$unite1
$somme = $unite1->sub($unite2);

echo $somme; // affiche "100 cm"
]]></programlisting>
            </example>
            </para>
    </sect2>

    <sect2 id="zend.measure.edit.equal">
        <title>Vérifier l'égalité des mesures</title>

        <para>
            Les mesures peuvent également être comparées, mais sans conversion automatique de
            l'unité. De plus, <methodname>equals()</methodname> retourne <constant>TRUE</constant>, seulement si la
            valeur et l'unité de mesure sont identiques.
        </para>

        <para>
            <example id="zend.measure.edit.equal.example-1">
                    <title>Mesures différentes</title>

                    <programlisting language="php"><![CDATA[
// Définition des mesures
$unite1 = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER);
$unite2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER);

if ($unite1->equals($unite2)) {
    print "Les mesures sont identiques";
} else {
    print "Les mesures sont différentes";
}
// affiche "Les mesures sont différentes"
]]></programlisting>
                </example> <example id="zend.measure.edit.equal.example-2">
                    <title>Mesures identiques</title>

                    <programlisting language="php"><![CDATA[
// Définition des mesures
$unite1 = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER);
$unite2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER);

$unite2->setType(Zend_Measure_Length::CENTIMETER);

if ($unite1->equals($unite2)) {
    print "Les mesures sont identiques";
} else {
    print "Les mesures sont différentes";
} // affiche "Les mesures sont identiques"
]]></programlisting>
                </example>
            </para>
    </sect2>

    <sect2 id="zend.measure.edit.compare">
        <title>Comparer les mesures</title>

        <para>
            Pour déterminer si une mesure est plus ou moins grande qu'une autre, il faut
            utiliser <methodname>compare()</methodname>, qui renvoie 0, -1 ou 1 selon la différence entre les
            deux objets. Les mesures identiques retourneront 0. Plus petit retournera -1 et plus
            grand retournera +1.
        </para>

        <para>
            <example id="zend.measure.edit.compare.example-1">
                    <title>Différence</title>

                    <programlisting language="php"><![CDATA[
$unite1 = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER);
$unite2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER);
$unite3 = new Zend_Measure_Length(1.2, Zend_Measure_Length::METER);

print "Egalité : ".$unite2->compare($unite1);
// affiche "Egalité : 0"
print "Plus petit que : ".$unite2->compare($unite3);
// affiche "Plus petit que : -1"
print "Plus grand que : ".$unite3->compare($unite2);
// affiche "Plus grand que : 1"
]]></programlisting>
                </example>
            </para>
    </sect2>

    <sect2 id="zend.measure.edit.changevalue">
        <title>Changer manuellement des valeurs</title>

        <para>
            Pour changer explicitement la valeur d'une mesure, il faut utiliser
            <methodname>setValue()</methodname> pour surcharger la valeur courante. Les paramètres sont
            identiques à ceux du constructeur.
        </para>

        <para>
            <example id="zend.measure.edit.changevalue.example-1">
                    <title>Changer une valeur</title>

                    <programlisting language="php"><![CDATA[
$locale = new Zend_Locale('de_AT');
$unite = new Zend_Measure_Length(1,Zend_Measure_Length::METER);

$unite->setValue(1.2);
echo $unite; // affiche "1.2 m"

$unite->setValue(1.2, Zend_Measure_Length::KILOMETER);
echo $unite; // affiche "1200 km"

$unite->setValue("1.234,56", Zend_Measure_Length::MILLIMETER,$locale);
echo $unite; // affiche "1234.56 mm"
]]></programlisting>
                </example>
            </para>
    </sect2>

    <sect2 id="zend.measure.edit.changetype">
        <title>Changer manuellement de type</title>

        <para>
            Pour changer le type d'une mesure sans altérer sa valeur, il faut utiliser
            <methodname>setType()</methodname>.
        </para>

        <example id="zend.measure.edit.changetype.example-1">
            <title>Changer de type</title>

            <programlisting language="php"><![CDATA[
$unite = new Zend_Measure_Length(1,Zend_Measure_Length::METER);
echo $unite; // affiche "1 m"

$unite->setType(Zend_Measure_Length::KILOMETER);
echo $unite; // affiche "1000 km"
]]></programlisting>
        </example>
    </sect2>
</sect1>