<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 17154 -->
<sect2 id="zend.filter.set.callback">
    <title>Callback</title>
    <para>
        このフィルタにより、<classname>Zend_Filter</classname>とともに自分自身のメソッドを使うことができます。
        機能を果たすメソッドすでにあるとき、新しいフィルタを生成する必要はありません。
    </para>

    <para>
        文字列を逆にするフィルタを生成したいとしましょう。
    </para>

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

print $filter->filter('Hello!');
// "!olleH"を返します
]]></programlisting>

    <para>
        おわかりのように、自分自身のフィルタを定義するために本当に簡単にコールバックを使えます。
        メソッド（それはクラス内で定義されます）をコールバックとして配列を与えることによって使うことも可能です。
    </para>

    <programlisting language="php"><![CDATA[
// クラスの定義
class MyClass
{
    public function Reverse($param);
}

// フィルター定義
$filter = new Zend_Filter_Callback(array('MyClass', 'Reverse'));
print $filter->filter('Hello!');
]]></programlisting>

    <para>
        実際に設定されているコールバックを取得するには<methodname>getCallback()</methodname>を使い、
        他のコールバックを設定するには<methodname>setCallback()</methodname>を使います。
    </para>

    <para>
        フィルタが実行されるとき、
        呼ばれるメソッドに配列として与えられるデフォルト・パラメータを定義できます。
        この配列は、フィルターされた値で結合されます。
    </para>

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

    <para>
        手動で上記のメソッド定義を呼ぶと、それはこのように見えます:
    </para>

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

    <note>
        <para>
            呼ばれることができないコールバック・メソッドを定義すると、
            例外が発生する点に注意しなければなりません。
        </para>
    </note>

</sect2>
