2
0

Zend_Validate-Callback.xml 7.7 KB

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