<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect2 id="zend.filter.set.boolean">
    <title>Boolean</title>

    <para>
        Ce filtre transforme toute donnée en valeur <constant>BOOLEAN</constant>. Ce peut être
        utile en travaillant avec des bases de données ou des formulaires.
    </para>

    <sect3 id="zend.filter.set.boolean.options">
        <title>Options supportées par Zend_Filter_Boolean</title>

        <para>
            Les options suivantes sont supportées par
            <classname>Zend_Filter_Boolean</classname>&#160;:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis><property>casting</property></emphasis>&#160;: quand cette option
                    est fixée à <constant>TRUE</constant> alors toute entrée sera transtypée en
                    booléen. Cette option vaut <constant>TRUE</constant> par défaut.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><property>locale</property></emphasis>&#160;: cette option permet
                    de spécifier la locale qui sera utilisée pour détecter une entrée localisée.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><property>type</property></emphasis>&#160;: l'option
                    <property>type</property> spécifie le type de booléen qui sera utilisé.
                    Lisez ce qui suit pour plus de détails.
                </para>
            </listitem>
        </itemizedlist>
    </sect3>

    <sect3 id="zend.filter.set.boolean.default">
        <title>Comportement par défaut de Zend_Filter_Boolean</title>

        <para>
            Par défaut, ce filtre transtype sa valeur vers un
            <constant>BOOLEEN</constant>&#160;; en d'autres termes, il fonctionne comme un appel
            PHP de type <command>(boolean) $value</command>.
        </para>

        <programlisting language="php"><![CDATA[
$filter = new Zend_Filter_Boolean();
$value  = '';
$result = $filter->filter($value);
// retourne false
]]></programlisting>

        <para>
            Ceci signifie que sans paramètre additionnel,
            <classname>Zend_Filter_Boolean</classname> prend toute valeur d'entrée et retourne un
            <constant>BOOLEEN</constant> comme le transtypage PHP vers le
            <constant>BOOLEEN</constant>.
        </para>
    </sect3>

    <sect3 id="zend.filter.set.boolean.types">
        <title>Changer le comportement de Zend_Filter_Boolean</title>

        <para>
            Parfois, le transtypage tel que <command>(boolean)</command> peut ne pas suffire.
            <classname>Zend_Filter_Boolean</classname> permet ainsi de configurer les types d'entrée
            à convertir, et ceux à ignorer.
        </para>

        <para>
            Les types suivants sont acceptés&#160;:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>boolean</emphasis>&#160;: retourne la valeur booléenne telle quelle.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>integer</emphasis>&#160;: convertit l'entier <emphasis>0</emphasis>
                    en <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>float</emphasis>&#160;: convertit le flottant
                    <emphasis>0.0</emphasis> en <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>string</emphasis>&#160;: convertit la chaîne vide
                    <emphasis>''</emphasis> en <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>zero</emphasis>&#160;: convertit la chaîne contenant zéro
                    (<emphasis>'0'</emphasis>) en <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>empty_array</emphasis>&#160;: convertit le tableau vide
                    <emphasis>array()</emphasis> en <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>null</emphasis>&#160;: convertit une valeur <constant>NULL</constant>
                    en <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>php</emphasis>&#160;: convertit une valeur, comme
                    <acronym>PHP</acronym> le ferait, en <constant>BOOLEEN</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>false_string</emphasis>&#160;: convertit une chaîne contenant le mot
                    "false" en booléen <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>yes</emphasis>&#160;: convertit une chaîne localisée contenant le mot
                    "no" en <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>all</emphasis>&#160;: convertit tous les types ci-dessus vers un
                    <constant>BOOLEEN</constant>.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Toute autre valeur fournie retournera <constant>TRUE</constant>.
        </para>

        <para>
            Pour préciser les options ci-dessus, plusieurs manières sont données&#160;: utilisez des
            chaînes, des constantes, ajoutez les, utilisez des tableaux... Voyez l'exemple&#160;:
        </para>

        <programlisting language="php"><![CDATA[
// convertit 0 vers false
$filter = new Zend_Filter_Boolean(Zend_Filter_Boolean::INTEGER);

// convertit 0 et '0' vers false
$filter = new Zend_Filter_Boolean(
    Zend_Filter_Boolean::INTEGER + Zend_Filter_Boolean::ZERO
);

// convertit 0 et '0' vers false
$filter = new Zend_Filter_Boolean(array(
    'type' => array(
        Zend_Filter_Boolean::INTEGER,
        Zend_Filter_Boolean::ZERO,
    ),
));

// convertit 0 et '0' vers false
$filter = new Zend_Filter_Boolean(array(
    'type' => array(
        'integer',
        'zero',
    ),
));
]]></programlisting>

        <para>
            Vous pouvez aussi passer une instance de <classname>Zend_Config</classname> pour
            préciser les options. Pour préciser ces options après la création de votre objet,
            utilisez la méthode <methodname>setType()</methodname>.
        </para>
    </sect3>

    <sect3 id="zend.filter.set.boolean.localized">
        <title>Booléens localisés</title>

        <para>
            Comme déjà précisé, <classname>Zend_Filter_Boolean</classname> reconnaît les chaînes
            localisées "yes" et "no". Ceci signifie que vous pouvez demander au client au travers
            d'un formulaire "oui" ou "non" dans sa propre langue et
            <classname>Zend_Filter_Boolean</classname> convertira la valeur vers le booléen
            approprié.
        </para>

        <para>
            Préciser la locale s'effectue grâce à la clé de configuration
            <property>locale</property> ou la méthode <methodname>setLocale()</methodname>.
        </para>

        <programlisting language="php"><![CDATA[
$filter = new Zend_Filter_Boolean(array(
    'type'   => Zend_Filter_Boolean::ALL,
    'locale' => 'de',
));

// retourne false
echo $filter->filter('nein');

$filter->setLocale('en');

// retourne true
$filter->filter('yes');
]]></programlisting>
    </sect3>

    <sect3 id="zend.filter.set.boolean.casting">
        <title>Désactiver le transtypage</title>

        <para>
            Il peut arriver de ne vouloir que reconnaître <constant>TRUE</constant> ou
            <constant>FALSE</constant> et donc retourner les autres valeurs telles quelles.
            <classname>Zend_Filter_Boolean</classname> permet un tel comportement via son
            option <property>casting</property> lorsque réglée sur <constant>FALSE</constant>.
        </para>

        <para>
            Dans un tel cas, <classname>Zend_Filter_Boolean</classname> fonctionnera comme décrit
            dans le tableau ci-dessous qui montre quelles valeurs retournent
            <constant>TRUE</constant> ou <constant>FALSE</constant>. Toute autre valeur non
            présente dans ce tableau sera retournée telle quelle lorsque l'option
            <property>casting</property> vaut <constant>FALSE</constant>.
        </para>

        <table id="zend.filter.set.boolean.casting.table">
            <title>Utilisation sans transtypage</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Type</entry>
                        <entry>True</entry>
                        <entry>False</entry>
                    </row>
                </thead>

                <tbody>
                    <row>
                        <entry><constant>Zend_Filter_Boolean::BOOLEAN</constant></entry>
                        <entry><constant>TRUE</constant></entry>
                        <entry><constant>FALSE</constant></entry>
                    </row>

                    <row>
                        <entry><constant>Zend_Filter_Boolean::INTEGER</constant></entry>
                        <entry>0</entry>
                        <entry>1</entry>
                    </row>

                    <row>
                        <entry><constant>Zend_Filter_Boolean::FLOAT</constant></entry>
                        <entry>0.0</entry>
                        <entry>1.0</entry>
                    </row>

                    <row>
                        <entry><constant>Zend_Filter_Boolean::STRING</constant></entry>
                        <entry>""</entry>
                        <entry />
                    </row>

                    <row>
                        <entry><constant>Zend_Filter_Boolean::ZERO</constant></entry>
                        <entry>"0"</entry>
                        <entry>"1"</entry>
                    </row>

                    <row>
                        <entry><constant>Zend_Filter_Boolean::EMPTY_ARRAY</constant></entry>
                        <entry><methodname>array()</methodname></entry>
                        <entry />
                    </row>

                    <row>
                        <entry><constant>Zend_Filter_Boolean::NULL</constant></entry>
                        <entry><constant>NULL</constant></entry>
                        <entry />
                    </row>

                    <row>
                        <entry><constant>Zend_Filter_Boolean::FALSE_STRING</constant></entry>
                        <entry>"false" (non sensible à la casse)</entry>
                        <entry>"true" (non sensible à la casse)</entry>
                    </row>

                    <row>
                        <entry><constant>Zend_Filter_Boolean::YES</constant></entry>
                        <entry>"oui" localisé (non sensible à la casse)</entry>
                        <entry>"non" localisé (non sensible à la casse)</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>

        <para>
            L'exemple qui suit illustre l'utilisation de l'option
            <property>casting</property>&#160;:
        </para>

        <programlisting language="php"><![CDATA[
$filter = new Zend_Filter_Boolean(array(
    'type'    => Zend_Filter_Boolean::ALL,
    'casting' => false,
));

// retourne false
echo $filter->filter(0);

// retourne true
echo $filter->filter(1);

// retourne la valeur
echo $filter->filter(2);
]]></programlisting>
    </sect3>
</sect2>