Zend_Validate-Callback.xml 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 21261 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.validate.set.callback">
  5. <title>Callback</title>
  6. <para>
  7. <classname>Zend_Validate_Callback</classname> erlaubt es einen Callback anzugeben der
  8. verwendet wird um einen angegebenen Wert zu prüfen.
  9. </para>
  10. <sect3 id="zend.validate.set.callback.options">
  11. <title>Unterstützte Optionen für Zend_Validate_Callback</title>
  12. <para>
  13. Die folgenden Optionen werden für <classname>Zend_Validate_Callback</classname>
  14. unterstützt:
  15. </para>
  16. <itemizedlist>
  17. <listitem>
  18. <para>
  19. <emphasis><property>callback</property></emphasis>: Setzt den Callback welcher
  20. für die Prüfung aufgerufen wird.
  21. </para>
  22. </listitem>
  23. <listitem>
  24. <para>
  25. <emphasis><property>options</property></emphasis>: Setzt zusätzliche Optionen
  26. welche an den Callback übergeben werden.
  27. </para>
  28. </listitem>
  29. </itemizedlist>
  30. </sect3>
  31. <sect3 id="zend.validate.set.callback.basic">
  32. <title>Grundsätzliche Verwendung</title>
  33. <para>
  34. Der einfachste Anwendungsfall besteht darin eine einzelne Funktion zu haben und diese
  35. als Callback zu verwenden. Angenommen wir haben die folgende Funktion.
  36. </para>
  37. <programlisting language="php"><![CDATA[
  38. function myMethod($value)
  39. {
  40. // einige Prüfungen
  41. return true;
  42. }
  43. ]]></programlisting>
  44. <para>
  45. Um diese in <classname>Zend_Validate_Callback</classname> zu verwenden muss man Sie
  46. nur auf folgende Weise aufrufen:
  47. </para>
  48. <programlisting language="php"><![CDATA[
  49. $valid = new Zend_Validate_Callback('myMethod');
  50. if ($valid->isValid($input)) {
  51. // Input scheint gültig zu sein
  52. } else {
  53. // Input ist ungültig
  54. }
  55. ]]></programlisting>
  56. </sect3>
  57. <sect3 id="zend.validate.set.callback.closure">
  58. <title>Verwendung mit Closures</title>
  59. <para>
  60. PHP 5.3 führt <ulink url="http://php.net/functions.anonymous">Closures</ulink> ein,
  61. welche grundsätzlich selbst-enthaltene oder <emphasis>anonyme</emphasis> Funktionen
  62. sind. PHP nimmt an das Closures eine andere Form eines Callbacks sind, und können daher
  63. als solche mit <classname>Zend_Validate_Callback</classname> verwendet werden. Als
  64. Beispiel:
  65. </para>
  66. <programlisting language="php"><![CDATA[
  67. $valid = new Zend_Validate_Callback(function($value){
  68. // einige Prüfungen
  69. return true;
  70. });
  71. if ($valid->isValid($input)) {
  72. // Input scheint gültig zu sein
  73. } else {
  74. // Input ist ungültig
  75. }
  76. ]]></programlisting>
  77. </sect3>
  78. <sect3 id="zend.validate.set.callback.class">
  79. <title>Verwendung mit klassenbasierten Callbacks</title>
  80. <para>
  81. Natürlich ist es auch möglich eine Klassenmethode als Callback zu verwenden. Angenommen
  82. wir haben die folgende Klassenmethode:
  83. </para>
  84. <programlisting language="php"><![CDATA[
  85. class MyClass
  86. {
  87. public function myMethod($value)
  88. {
  89. // einige Prüfungen
  90. return true;
  91. }
  92. }
  93. ]]></programlisting>
  94. <para>
  95. Die Definition des Callbacks ist in diesem Fall fast die gleiche. Man muss nur eine
  96. Instanz der Klasse vor der Methode erstellen und ein Array das den Callback beschreibt:
  97. </para>
  98. <programlisting language="php"><![CDATA[
  99. $object = new MyClass;
  100. $valid = new Zend_Validate_Callback(array($object, 'myMethod'));
  101. if ($valid->isValid($input)) {
  102. // Input scheint gültig zu sein
  103. } else {
  104. // Input ist ungültig
  105. }
  106. ]]></programlisting>
  107. <para>
  108. Man kann auch eine statische Methode als Callback definieren. Angenommen wir haben die
  109. folgende Klassendefinition dann ist die Verwendung des Prüfers wie folgt:
  110. </para>
  111. <programlisting language="php"><![CDATA[
  112. class MyClass
  113. {
  114. public static function test($value)
  115. {
  116. // Einige Prüfungen
  117. return true;
  118. }
  119. }
  120. $valid = new Zend_Validate_Callback(array('MyClass', 'test'));
  121. if ($valid->isValid($input)) {
  122. // Input scheint gültig zu sein
  123. } else {
  124. // Input ist ungültig
  125. }
  126. ]]></programlisting>
  127. <para>
  128. Letztendlich kann man, wenn man PHP 5.3 verwendet, die magische Methode
  129. <methodname>__invoke()</methodname> in der eigenen Klasse definieren. Wenn man das tut
  130. dann funktioniert die Angabe einer Instanz der Klasse genauso:
  131. </para>
  132. <programlisting language="php"><![CDATA[
  133. class MyClass
  134. {
  135. public function __invoke($value)
  136. {
  137. // some validation
  138. return true;
  139. }
  140. }
  141. $object = new MyClass();
  142. $valid = new Zend_Validate_Callback($object);
  143. if ($valid->isValid($input)) {
  144. // Input scheint gültig zu sein
  145. } else {
  146. // Input ist ungültig
  147. }
  148. ]]></programlisting>
  149. </sect3>
  150. <sect3 id="zend.validate.set.callback.options2">
  151. <title>Optionen hinzufügen</title>
  152. <para>
  153. <classname>Zend_Validate_Callback</classname> erlaubt auch die Verwendung von Optionen
  154. welche als zusätzliche Argumente dem Callback übergeben werden.
  155. </para>
  156. <para>
  157. Nehmen wir die folgende Klassen und Methoden Definition an:
  158. </para>
  159. <programlisting language="php"><![CDATA[
  160. class MyClass
  161. {
  162. function myMethod($value, $option)
  163. {
  164. // einige Prüfungen
  165. return true;
  166. }
  167. }
  168. ]]></programlisting>
  169. <para>
  170. Es gibt zwei Wege um den Prüfer über zusätzliche Optionen zu informieren: Diese im
  171. Constructor übergeben, oder Sie mit der Methode <methodname>setOptions()</methodname>
  172. übergeben.
  173. </para>
  174. <para>
  175. Um Sie im Contructor zu übergeben, muss ein Array übergeben werden das die zwei
  176. Schlüssel "callback" und "options" enthält:
  177. </para>
  178. <programlisting language="php"><![CDATA[
  179. $valid = new Zend_Validate_Callback(array(
  180. 'callback' => array('MyClass', 'myMethod'),
  181. 'options' => $option,
  182. ));
  183. if ($valid->isValid($input)) {
  184. // Input scheint gültig zu sein
  185. } else {
  186. // Input ist ungültig
  187. }
  188. ]]></programlisting>
  189. <para>
  190. Andererseits können Sie dem Prüfer auch nach der Instanzierung übergeben werden:
  191. </para>
  192. <programlisting language="php"><![CDATA[
  193. $valid = new Zend_Validate_Callback(array('MyClass', 'myMethod'));
  194. $valid->setOptions($option);
  195. if ($valid->isValid($input)) {
  196. // Input scheint gültig zu sein
  197. } else {
  198. // Input ist ungültig
  199. }
  200. ]]></programlisting>
  201. <para>
  202. Wenn zusätzliche Werte an <methodname>isValid()</methodname> übergeben werden, dann
  203. werden diese Werte unmittelbar nach <varname>$value</varname> hinzugefügt.
  204. </para>
  205. <programlisting language="php"><![CDATA[
  206. $valid = new Zend_Validate_Callback(array('MyClass', 'myMethod'));
  207. $valid->setOptions($option);
  208. if ($valid->isValid($input, $additional)) {
  209. // Input scheint gültig zu sein
  210. } else {
  211. // Input ist ungültig
  212. }
  213. ]]></programlisting>
  214. <para>
  215. Wenn der Aufruf zu einem Callback durchgeführt wird, dann wird der Wert der zu
  216. überprüfen ist als erstes Argument an den Callback übergeben gefolgt von allen anderen
  217. Werten die an <methodname>isValid()</methodname> übergeben wurden; alle anderen Optionen
  218. folgen Ihm. Die Anzahl und der Typ der Optionen welche verwendet werden ist nicht
  219. limitiert.
  220. </para>
  221. </sect3>
  222. </sect2>
  223. <!--
  224. vim:se ts=4 sw=4 et:
  225. -->