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

    <para>
        Dieser Filter ändert eine gegebene Eingabe auf einen <constant>BOOLEAN</constant> Wert. Das
        ist oft nützlich wenn man mit Datenbanken arbeitet oder wenn Formularwerte bearbeitet
        werden.
    </para>

    <sect3 id="zend.filter.set.boolean.default">
        <title>Standardverhalten von Zend_Filter_Boolean</title>

        <para>
            Standardmäßig arbeitet dieser Filter indem er Eingabe auf <constant>BOOLEAN</constant>
            Werte castet; in anderen Worte, er arbeitet in ähnlicher Weise wie der Aufruf von
            <command>(boolean) $value</command>.
        </para>

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

        <para>
            Dies bedeuetet dass <classname>Zend_Filter_Boolean</classname> ohne die Angabe einer
            Konfiguration alle Eingabetypen akteptiert und ein <constant>BOOLEAN</constant>
            zurückgibt wie man es durch Typcasting zu <constant>BOOLEAN</constant> erhält.
        </para>
    </sect3>

    <sect3 id="zend.filter.set.boolean.types">
        <title>Das Verhalten von Zend_Filter_Boolean ändern</title>

        <para>
            Manchmal ist das Casten mit <command>(boolean)</command> nicht ausreichend.
            <classname>Zend_Filter_Boolean</classname> erlaubt es spezifische Typen zu konfigurieren
            welche konvertiert werden, und jene die ignoriert werden.
        </para>

        <para>
            Die folgenden Typen können behandelt werden:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>boolean</emphasis>: Gibt einen boolschen Wert so wie er ist zurück.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>integer</emphasis>: Konvertiert den Integerwert <emphasis>0</emphasis>
                    zu <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>float</emphasis>: Konvertiert den Gleitkommawert
                    <emphasis>0.0</emphasis> zu <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>string</emphasis>: Konvertiert einen leeren String
                    <emphasis>''</emphasis> zu <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>zero</emphasis>: Konvertiert einen String der ein einzelnes Null
                    Zeichen (<emphasis>'0'</emphasis>) enthält zu <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>empty_array</emphasis>: Konvertiert ein leeres
                    <emphasis>array</emphasis> zu <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>null</emphasis>: Konvertiert den Wert <constant>NULL</constant> zu
                    <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>php</emphasis>: Konvertiert Werte so wie diese mit
                    <acronym>PHP</acronym> zu <constant>BOOLEAN</constant> konvertiert werden.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>false_string</emphasis>: Konvertiert einen String der das Wort
                    "false" enthält zu einem boolschen <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>yes</emphasis>: Konvertiert einen lokalisierten String welcher das
                    Wort "nein" enthält zu <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>all</emphasis>: Konvertiert alle obigen Typen zu
                    <constant>BOOLEAN</constant>.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Alle anderen angegebenen Werte geben standardmäßig <constant>TRUE</constant> zurück.
        </para>

        <para>
            Es gibt verschiedene Wege um auszuwählen welche der oben stehenden Typen gefiltert
            werden. Man kann ein oder mehrere Typen angeben und Sie hinzufügen, man kann ein Array
            angeben, man kann die Konstanten verwenden, oder man kann einen textuellen String
            angeben. Siehe die folgenden Beispiele:
        </para>

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

// Konvertiert 0 und '0' zu false
$filter = new Zend_Filter_Boolean(
    Zend_Filter_Boolean::INTEGER + Zend_Filter_Boolean::ZERO
);

// Konvertiert 0 und '0' zu false
$filter = new Zend_Filter_Boolean(array(
    'type' => array(
        Zend_Filter_Boolean::INTEGER,
        Zend_Filter_Boolean::ZERO,
    ),
));

// Konvertiert 0 und '0' zu false
$filter = new Zend_Filter_Boolean(array(
    'type' => array(
        'integer',
        'zero',
    ),
));
]]></programlisting>

        <para>
            Man kann auch eine Instanz von <classname>Zend_Config</classname> angeben um die
            gewünschten Typen zu setzen. Um Typen nach der Instanzierung zu setzen kann die Methode
            <methodname>setType()</methodname> verwendet werden.
        </para>
    </sect3>

    <sect3 id="zend.filter.set.boolean.localized">
        <title>Lokalisierte Boolsche Werte</title>

        <para>
            Wie vorher erwähnt erkennt <classname>Zend_Filter_Boolean</classname> auch die
            lokalisierten Strings für "Ja" und "Nein". Das bedeutet das man den Kunden in einem
            Formular nach "Ja" oder "Nein" in seiner eigenen Sprache fragen kann und
            <classname>Zend_Filter_Boolean</classname> die Antworten zu richtigen boolschen Werten
            konvertieren wird.
        </para>

        <para>
            Um das gewünschte Gebietsschema zu setzen kann man entweder die Option
            <property>locale</property> verwenden oder die Methode
            <methodname>setLocale()</methodname> verwenden.
        </para>

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

// Gibt false zurück
echo $filter->filter('nein');

$filter->setLocale('en');

// Gibt true zurück
$filter->filter('yes');
]]></programlisting>
    </sect3>

    <sect3 id="zend.filter.set.boolean.casting">
        <title>Casten ausschalten</title>

        <para>
            Machmal ist es nützlich nur <constant>TRUE</constant> oder <constant>FALSE</constant>
            zu erkennen und alle anderen Werte ohne Änderung zurückzugeben.
            <classname>Zend_Filter_Boolean</classname> erlaubt dies indem die Option
            <property>casting</property> auf <constant>FALSE</constant> gesetzt wird.
        </para>

        <para>
            In diesem Fall arbeitet <classname>Zend_Filter_Boolean</classname> wie in der folgenden
            Tabelle beschrieben, die zeigt welche Werte <constant>TRUE</constant> oder
            <constant>FALSE</constant> zurückgeben. Alle anderen angegebenen Werte werden ohne
            Änderung zurückgegeben wenn <property>casting</property> auf <constant>FALSE</constant>
            gesetzt wird.
        </para>

        <table id="zend.filter.set.boolean.casting.table">
            <title>Verwendung ohne Casten</title>

            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Typ</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" (unabhängig von der Schreibweise)</entry>
                        <entry>"true" (unabhängig von der Schreibweise)</entry>
                    </row>

                    <row>
                        <entry><constant>Zend_Filter_Boolean::YES</constant></entry>
                        <entry>localized "yes" (unabhängig von der Schreibweise)</entry>
                        <entry>localized "no" (unabhängig von der Schreibweise)</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>

        <para>
            Das folgende Beispiel zeigt das Verhalten wenn die Option
            <property>casting</property> verändert wird:
        </para>

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

// Gibt false zurück
echo $filter->filter(0);

// Gibt true zurück
echo $filter->filter(1);

// Gibt den Wert zurück
echo $filter->filter(2);
]]></programlisting>
    </sect3>
</sect2>
