|
|
@@ -0,0 +1,223 @@
|
|
|
+<?xml version="1.0" encoding="UTF-8"?>
|
|
|
+<!-- EN-Revision: 18270 -->
|
|
|
+<!-- 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.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>
|
|
|
+ PHP 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. PHP 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 PHP 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.options">
|
|
|
+ <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 der Aufruf zu einem Callback durchgeführt wird, dann wird der Wert der zu
|
|
|
+ überprüfen ist als erstes Argument an den Callback übergeben; 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:
|
|
|
+-->
|