| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect2 id="zend.validate.set.callback">
- <title>Callback</title>
- <para>
- <classname>Zend_Validate_Callback</classname> erlaubt es einen Callback anzugeben der
- verwendet wird um einen angegebenen Wert zu prüfen.
- </para>
- <sect3 id="zend.validate.set.callback.options">
- <title>Unterstützte Optionen für Zend_Validate_Callback</title>
- <para>
- Die folgenden Optionen werden für <classname>Zend_Validate_Callback</classname>
- unterstützt:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis><property>callback</property></emphasis>: Setzt den Callback welcher
- für die Prüfung aufgerufen wird.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>options</property></emphasis>: Setzt zusätzliche Optionen
- welche an den Callback übergeben werden.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- <sect3 id="zend.validate.set.callback.basic">
- <title>Grundsätzliche Verwendung</title>
- <para>
- Der einfachste Anwendungsfall besteht darin eine einzelne Funktion zu haben und diese
- als Callback zu verwenden. Angenommen wir haben die folgende Funktion.
- </para>
- <programlisting language="php"><![CDATA[
- function myMethod($value)
- {
- // einige Prüfungen
- return true;
- }
- ]]></programlisting>
- <para>
- Um diese in <classname>Zend_Validate_Callback</classname> zu verwenden muss man Sie
- nur auf folgende Weise aufrufen:
- </para>
- <programlisting language="php"><![CDATA[
- $valid = new Zend_Validate_Callback('myMethod');
- if ($valid->isValid($input)) {
- // Input scheint gültig zu sein
- } else {
- // Input ist ungültig
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.validate.set.callback.closure">
- <title>Verwendung mit Closures</title>
- <para>
- <acronym>PHP</acronym> 5.3 führt <ulink
- url="http://php.net/functions.anonymous">Closures</ulink> ein,
- welche grundsätzlich selbst-enthaltene oder <emphasis>anonyme</emphasis> Funktionen
- sind. <acronym>PHP</acronym> nimmt an das Closures eine andere Form eines Callbacks
- sind, und können daher als solche mit <classname>Zend_Validate_Callback</classname>
- verwendet werden. Als Beispiel:
- </para>
- <programlisting language="php"><![CDATA[
- $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
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.validate.set.callback.class">
- <title>Verwendung mit klassenbasierten Callbacks</title>
- <para>
- Natürlich ist es auch möglich eine Klassenmethode als Callback zu verwenden. Angenommen
- wir haben die folgende Klassenmethode:
- </para>
- <programlisting language="php"><![CDATA[
- class MyClass
- {
- public function myMethod($value)
- {
- // einige Prüfungen
- return true;
- }
- }
- ]]></programlisting>
- <para>
- 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:
- </para>
- <programlisting language="php"><![CDATA[
- $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
- }
- ]]></programlisting>
- <para>
- Man kann auch eine statische Methode als Callback definieren. Angenommen wir haben die
- folgende Klassendefinition dann ist die Verwendung des Prüfers wie folgt:
- </para>
- <programlisting language="php"><![CDATA[
- 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
- }
- ]]></programlisting>
- <para>
- Letztendlich kann man, wenn man <acronym>PHP</acronym> 5.3 verwendet, die magische
- Methode <methodname>__invoke()</methodname> in der eigenen Klasse definieren. Wenn man
- das tut dann funktioniert die Angabe einer Instanz der Klasse genauso:
- </para>
- <programlisting language="php"><![CDATA[
- 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
- }
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.validate.set.callback.options2">
- <title>Optionen hinzufügen</title>
- <para>
- <classname>Zend_Validate_Callback</classname> erlaubt auch die Verwendung von Optionen
- welche als zusätzliche Argumente dem Callback übergeben werden.
- </para>
- <para>
- Nehmen wir die folgende Klassen und Methoden Definition an:
- </para>
- <programlisting language="php"><![CDATA[
- class MyClass
- {
- function myMethod($value, $option)
- {
- // einige Prüfungen
- return true;
- }
- }
- ]]></programlisting>
- <para>
- Es gibt zwei Wege um den Prüfer über zusätzliche Optionen zu informieren: Diese im
- Constructor übergeben, oder Sie mit der Methode <methodname>setOptions()</methodname>
- übergeben.
- </para>
- <para>
- Um Sie im Contructor zu übergeben, muss ein Array übergeben werden das die zwei
- Schlüssel "callback" und "options" enthält:
- </para>
- <programlisting language="php"><![CDATA[
- $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
- }
- ]]></programlisting>
- <para>
- Andererseits können Sie dem Prüfer auch nach der Instanzierung übergeben werden:
- </para>
- <programlisting language="php"><![CDATA[
- $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
- }
- ]]></programlisting>
- <para>
- Wenn zusätzliche Werte an <methodname>isValid()</methodname> übergeben werden, dann
- werden diese Werte unmittelbar nach <varname>$value</varname> hinzugefügt.
- </para>
- <programlisting language="php"><![CDATA[
- $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
- }
- ]]></programlisting>
- <para>
- 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 <methodname>isValid()</methodname> übergeben wurden; alle anderen Optionen
- folgen Ihm. Die Anzahl und der Typ der Optionen welche verwendet werden ist nicht
- limitiert.
- </para>
- </sect3>
- </sect2>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|