# Callback

`Zend_Validate_Callback` erlaubt es einen Callback anzugeben der verwendet wird um einen angegebenen Wert zu prüfen.

## Grundsätzliche Verwendung

Der einfachste Anwendungsfall besteht darin eine einzelne Funktion zu haben und diese als Callback zu verwenden. Angenommen wir haben die folgende Funktion.

    function myMethod($value)
    {
        // einige Prüfungen
        return true;
    }

Um diese in `Zend_Validate_Callback` zu verwenden muss man Sie nur auf folgende Weise aufrufen:

    $valid = new Zend_Validate_Callback('myMethod');
    if ($valid->isValid($input)) {
        // Input scheint gültig zu sein
    } else {
        // Input ist ungültig
    }

## Verwendung mit Closures

PHP 5.3 führt Closures ein, welche grundsätzlich selbst-enthaltene oder anonyme Funktionen sind. PHP nimmt an das Closures eine andere Form eines Callbacks sind, und können daher als solche mit `Zend_Validate_Callback` verwendet werden. Als Beispiel:

    $valid = new Zend_Validate_Callback(function($value){
        // einige Prüfungen
        return true;
    });

    if ($valid->isValid($input)) {
        // Input scheint gültig zu sein
    } else {
        // Input ist ungültig
    }

## Verwendung mit klassenbasierten Callbacks

Natürlich ist es auch möglich eine Klassenmethode als Callback zu verwenden. Angenommen wir haben die folgende Klassenmethode:

    class MyClass
    {
        public function myMethod($value)
        {
            // einige Prüfungen
            return true;
        }
    }

Die Definition des Callbacks ist in diesem Fall fast die gleiche. Man muss nur eine Instanz der Klasse vor der Methode erstellen und ein Array das den Callback beschreibt:

    $object = new MyClass;
    $valid = new Zend_Validate_Callback(array($object, 'myMethod'));
    if ($valid->isValid($input)) {
        // Input scheint gültig zu sein
    } else {
        // Input ist ungültig
    }

Man kann auch eine statische Methode als Callback definieren. Angenommen wir haben die folgende Klassendefinition dann ist die Verwendung des Prüfers wie folgt:

    class MyClass
    {
        public static function test($value)
        {
            // Einige Prüfungen
            return true;
        }
    }

    $valid = new Zend_Validate_Callback(array('MyClass', 'test'));
    if ($valid->isValid($input)) {
        // Input scheint gültig zu sein
    } else {
        // Input ist ungültig
    }

Letztendlich kann man, wenn man PHP 5.3 verwendet, die magische Methode `__invoke()` in der eigenen Klasse definieren. Wenn man das tut dann funktioniert die Angabe einer Instanz der Klasse genauso:

    class MyClass
    {
        public function __invoke($value)
        {
            // some validation
            return true;
        }
    }

    $object = new MyClass();
    $valid = new Zend_Validate_Callback($object);
    if ($valid->isValid($input)) {
        // Input scheint gültig zu sein
    } else {
        // Input ist ungültig
    }

## Optionen hinzufügen

`Zend_Validate_Callback` erlaubt auch die Verwendung von Optionen welche als zusätzliche Argumente dem Callback übergeben werden.

Nehmen wir die folgende Klassen und Methoden Definition an:

    class MyClass
    {
        function myMethod($value, $option)
        {
            // einige Prüfungen
            return true;
        }
    }

Es gibt zwei Wege um den Prüfer über zusätzliche Optionen zu informieren: Diese im Constructor übergeben, oder Sie mit der Methode `setOptions()` übergeben.

Um Sie im Contructor zu übergeben, muss ein Array übergeben werden das die zwei Schlüssel "callback" und "options" enthält:

    $valid = new Zend_Validate_Callback(array(
        'callback' => array('MyClass', 'myMethod'),
        'options'  => $option,
    ));

    if ($valid->isValid($input)) {
        // Input scheint gültig zu sein
    } else {
        // Input ist ungültig
    }

Andererseits können Sie dem Prüfer auch nach der Instanzierung übergeben werden:

    $valid = new Zend_Validate_Callback(array('MyClass', 'myMethod'));
    $valid->setOptions($option);

    if ($valid->isValid($input)) {
        // Input scheint gültig zu sein
    } else {
        // Input ist ungültig
    }

Wenn zusätzliche Werte an `isValid()` übergeben werden, dann werden diese Werte unmittelbar nach `$value` hinzugefügt.

    $valid = new Zend_Validate_Callback(array('MyClass', 'myMethod'));
    $valid->setOptions($option);

    if ($valid->isValid($input, $additional)) {
        // Input scheint gültig zu sein
    } else {
        // Input ist ungültig
    }

Wenn der Aufruf zu einem Callback durchgeführt wird, dann wird der Wert der zu überprüfen ist als erstes Argument an den Callback übergeben gefolgt von allen anderen Werten die an `isValid()` übergeben wurden; alle anderen Optionen folgen Ihm. Die Anzahl und der Typ der Optionen welche verwendet werden ist nicht limitiert.