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

    <para>
        <classname>Zend_Validate_Identical</classname> erlaubt es zu prüfen ob ein angegebener Wert
        mit einem angegebenen Vergleichswert identisch ist.
    </para>

    <sect3 id="zend.validate.set.identical.options">
        <title>Unterstützte Optionen für Zend_Validate_Identical</title>

        <para>
            Die folgenden Optionen werden für <classname>Zend_Validate_Identical</classname>
            unterstützt:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis><property>strict</property></emphasis>: Definiert ob die Prüfung
                    strikt durchgeführt werden soll. Der Standardwert ist <constant>TRUE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><property>token</property></emphasis>: Setzt den Token gegen den die
                    Eingabe geprüft werden soll.
                </para>
            </listitem>
        </itemizedlist>
    </sect3>

    <sect3 id="zend.validate.set.identical.basic">
        <title>Grundsätzliche Verwendung</title>

        <para>
            Um zu prüfen ob zwei Werte identisch sind muss man den originalen Wert als
            Vergleichswert setzen. Siehe das folgende Beispiel welches zwei Strings vergleicht.
        </para>

        <programlisting language="php"><![CDATA[
$valid = new Zend_Validate_Identical('original');
if ($valid->isValid($value) {
    return true;
}
]]></programlisting>

        <para>
            Die Prüfung wird nur dann <constant>TRUE</constant> zurückgeben wenn beide Werte 100%
            identisch sind. In unserem Beispiel wenn <varname>$value</varname> 'original' ist.
        </para>

        <para>
            Man kann den gewünschten Token auch im Nachhinein durch Verwendung der Methode
            <methodname>setToken()</methodname> setzen und mit <methodname>getToken()</methodname>
            den aktuell gesetzten Token erhalten.
        </para>
    </sect3>

    <sect3 id="zend.validate.set.identical.types">
        <title>Identische Objekte</title>

        <para>
            Natürlich kann <classname>Zend_Validate_Identical</classname> nicht nur Strings prüfen,
            sondern jeden Variablentyp wie Boolean, Integer, Float, Array oder sogar Objekte. Wie
            bereits notiert müssen Vergleichswert und Wert identisch sein.
        </para>

        <programlisting language="php"><![CDATA[
$valid = new Zend_Validate_Identical(123);
if ($valid->isValid($input)) {
    // Der Wert scheint gültig zu sein
} else {
    // Der Wert ist ungültig
}
]]></programlisting>

        <note>
            <title>Vergleich des Typs</title>

            <para>
                Man sollte darauf acht geben das der Typ einer Variable für die Prüfung verwendet
                wird. Das bedeutet das der String <emphasis>'3'</emphasis> nicht identisch ist mit
                dem Integerwert <emphasis>3</emphasis>. Wenn man eine nicht strikte Prüfung
                durchführen will muss man die <property>strict</property> Option setzen.
            </para>
        </note>
    </sect3>

    <sect3 id="zend.validate.set.identical.formelements">
        <title>Formular Elemente</title>

        <para>
            <classname>Zend_Validate_Identical</classname> unterstützt auch den Vergleich von
            Formularelementen. Das kann getan werden indem der Name des Elements als
            <property>token</property> verwendet wird. Siehe das folgende Beispiel:
        </para>

        <programlisting language="php"><![CDATA[
$form->addElement('password', 'elementOne');
$form->addElement('password', 'elementTwo', array(
    'validators' => array(
        array('identical', false, array('token' => 'elementOne'))
    )
));
]]></programlisting>

        <para>
            Indem der Elementname vom ersten Element als <property>token</property> für das zweite
            Element verwendet wird, prüft der Prüfer ob das zweite Element gleich dem ersten Element
            ist. Im Falle das der Benutzer keine zwei identischen Werte eingegeben hat, erhält man
            einen Prüffehler.
        </para>
    </sect3>

    <sect3 id="zend.validate.set.identical.strict">
        <title>Strikte Prüfung</title>

        <para>
            Wie vorher erwähnt prüft <classname>Zend_Validate_Identical</classname> die Token
            strikt. Man kann dieses Verhalten ändern indem die <property>strict</property> Option
            verwendet wird. Der Standardwert für diese Eigenschaft ist <constant>TRUE</constant>.
        </para>

        <programlisting language="php"><![CDATA[
$valid = new Zend_Validate_Identical(array('token' => 123, 'strict' => FALSE));
$input = '123';
if ($valid->isValid($input)) {
    // Die Eingabe scheint gültig zu sein
} else {
    // Die Eingabe ist ungültig
}
]]></programlisting>

        <para>
            Der Unterschied zum vorhergehenden Beispiel besteht darin dass die Prüfung in diesem
            Fall <constant>TRUE</constant> zurückgibt, selbst wenn man einen Integerwert mit einem
            String prüft solange der Inhalt identisch aber nicht vom gleichen Typ ist.
        </para>

        <para>
            Der Bequemlichkeit halber kann man auch <methodname>setStrict()</methodname> und
            <methodname>getStrict()</methodname> verwenden.
        </para>
    </sect3>

    <sect3 id="zend.validate.set.identical.configuration">
        <title>Konfiguration</title>

        <para>
            Wie alle anderen Prüfungen unterstützt <classname>Zend_Validate_Identical</classname>
            auch die Verwendung von Konfigurationseinstellungen als Eingabe Parameter. Das
            bedeutet das man den Prüfer mit einem <classname>Zend_Config</classname> Objekt
            konfigurieren kann.
        </para>

        <para>
            Aber das führt zu einem weiteren Fall den man berücksichtigen muss. Wenn man ein Array
            als Vergleichswert verwendet, dann sollte man dieses in einen
            '<property>token</property>' Schlüssel einhüllen wenn dieses nur ein Element enthält.
        </para>

        <programlisting language="php"><![CDATA[
$valid = new Zend_Validate_Identical(array('token' => 123));
if ($valid->isValid($input)) {
    // Der Wert scheint gültig zu sein
} else {
    // Der Wert ist ungültig
}
]]></programlisting>

        <para>
            Das oben stehende Beispiel prüft den Integerwert 123. Der Grund für diesen speziellen
            Fall ist, dass man den Token der verwendet werden soll, durch Angabe des
            '<property>token</property>' Schlüssels, konfigurieren kann.
        </para>

        <para>
            Wenn der eigene Vergleichswert nur ein Element enthält, und dieses Element
            '<property>token</property>' heißt dann muss man dieses, wie im oben stehenden Beispiel
            gezeigt, einhüllen.
        </para>

        <programlisting language="php"><![CDATA[
$valid = new Zend_Validate_Identical(array('token' => array('token' => 123)));
if ($valid->isValid($input)) {
    // Der Wert scheint gültig zu sein
} else {
    // Der Wert ist ungültig
}
]]></programlisting>
    </sect3>
</sect2>
