Zend_Validate-Callback.xml 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 18840 -->
  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 der Aufruf zu einem Callback durchgeführt wird, dann wird der Wert der zu
  182. überprüfen ist als erstes Argument an den Callback übergeben; alle anderen Optionen
  183. folgen Ihm. Die anzahl und der Typ der Optionen welche verwendet werden ist nicht
  184. limitiert.
  185. </para>
  186. </sect3>
  187. </sect2>
  188. <!--
  189. vim:se ts=4 sw=4 et:
  190. -->