Zend_Validate-Callback.xml 6.8 KB

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