<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<sect2 id="zend.filter.set.callback">
    <title>Callback</title>
    <para>
        Ce filtre vous permet d'utiliser votre propre fonction en tant que filtre de
        <classname>Zend_Filter</classname>. Nul besoin de créer un filtre si une fonction ou méthode
        fait déja le travail.
    </para>

    <para>
        Par exemple un filtre qui inverse une chaine.
    </para>

    <programlisting language="php"><![CDATA[
$filter = new Zend_Filter_Callback('strrev');

print $filter->filter('Hello!');
// retourne "!olleH"
]]></programlisting>

    <para>
        C'est très simple de passer une fonction à appliquer comme filtre. Dans le cas de méthodes de classes, 
        passez un tableau comme callback.
    </para>

    <programlisting language="php"><![CDATA[
// Notre classe
class MyClass
{
    public function Reverse($param);
}

// La définition du filtre
$filter = new Zend_Filter_Callback(array('MyClass', 'Reverse'));
print $filter->filter('Hello!');
]]></programlisting>

    <para>
        Pour récupérer la fonction de filtrage actuelle, utilisez <code>getCallback()</code> et pour en
        affecter une nouvelle, utilisez <code>setCallback()</code>.
    </para>

    <para>
        Il est aussi possible de définir des paramètres par défaut qui sont alors passés à la
        méthode appelée lorsque le filtre est exécuté.
    </para>

    <programlisting language="php"><![CDATA[
$filter = new Zend_Filter_Callback(
    'MyMethod',
    array('key' => 'param1', 'key2' => 'param2')
);
$filter->filter(array('value' => 'Hello'));
]]></programlisting>

    <para>
        L'appel manuel à une telle fonction se serait fait comme cela:
    </para>

    <programlisting language="php"><![CDATA[
$value = MyMethod('Hello', 'param1', 'param2');
]]></programlisting>

    <note>
        <para>
            Notez que passer une fonction qui ne peut être appelée mènera à une exception.
        </para>
    </note>

</sect2>
