array_walk_closure.phpt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. --TEST--
  2. array_walk() closure tests
  3. --FILE--
  4. <?php
  5. var_dump(array_walk());
  6. $ar = false;
  7. var_dump(array_walk($ar, $ar));
  8. $ar = NULL;
  9. var_dump(array_walk($ar, $ar));
  10. $ar = ["one" => 1, "two"=>2, "three" => 3];
  11. var_dump(array_walk($ar, function(){ var_dump(func_get_args());}));
  12. echo "\nclosure with array\n";
  13. $ar = ["one" => 1, "two"=>2, "three" => 3];
  14. $user_data = ["sum" => 42];
  15. $func = function($value, $key, &$udata) {
  16. var_dump($udata);
  17. $udata["sum"] += $value;
  18. };
  19. var_dump(array_walk($ar, $func, $user_data));
  20. echo "End result:";
  21. var_dump($user_data["sum"]);
  22. echo "\nclosure with use\n";
  23. $ar = ["one" => 1, "two"=>2, "three" => 3];
  24. $user_data = ["sum" => 42];
  25. $func = function($value, $key) use (&$user_data) {
  26. var_dump($user_data);
  27. $user_data["sum"] += $value;
  28. };
  29. var_dump(array_walk($ar, $func, $user_data));
  30. echo "End result:";
  31. var_dump($user_data["sum"]);
  32. echo "\nclosure with object\n";
  33. $ar = ["one" => 1, "two"=>2, "three" => 3];
  34. $user_data = (object)["sum" => 42];
  35. $func = function($value, $key, &$udata) {
  36. var_dump($udata);
  37. $udata->sum += $value;
  38. };
  39. var_dump(array_walk($ar, $func, $user_data));
  40. echo "End result:";
  41. var_dump($user_data->sum);
  42. echo "\nfunction with object\n";
  43. function sum_it_up_object($value, $key, $udata)
  44. {
  45. var_dump($udata);
  46. $udata->sum += $value;
  47. }
  48. $ar = ["one" => 1, "two"=>2, "three" => 3];
  49. $user_data = (object)["sum" => 42];
  50. var_dump(array_walk($ar, "sum_it_up_object", $user_data));
  51. echo "End result:";
  52. var_dump($user_data->sum);
  53. echo "\nfunction with array\n";
  54. function sum_it_up_array($value, $key, $udata)
  55. {
  56. var_dump($udata);
  57. $udata['sum'] += $value;
  58. }
  59. $ar = ["one" => 1, "two"=>2, "three" => 3];
  60. $user_data = ["sum" => 42];
  61. var_dump(array_walk($ar, "sum_it_up_array", $user_data));
  62. echo "End result:";
  63. var_dump($user_data['sum']);
  64. echo "\nclosure and exception\n";
  65. $ar = ["one" => 1, "two"=>2, "three" => 3];
  66. try {
  67. var_dump(array_walk($ar, function($v, $k) { if ($v == 2) throw new Exception; } ));
  68. } catch (Exception $e) {
  69. var_dump($e->getTrace());
  70. }
  71. echo "Done\n";
  72. ?>
  73. --EXPECTF--
  74. Warning: array_walk() expects at least 2 parameters, 0 given in %s on line %d
  75. NULL
  76. Warning: array_walk() expects parameter 1 to be array, boolean given in %s on line %d
  77. NULL
  78. Warning: array_walk() expects parameter 1 to be array, null given in %s on line %d
  79. NULL
  80. array(2) {
  81. [0]=>
  82. int(1)
  83. [1]=>
  84. string(3) "one"
  85. }
  86. array(2) {
  87. [0]=>
  88. int(2)
  89. [1]=>
  90. string(3) "two"
  91. }
  92. array(2) {
  93. [0]=>
  94. int(3)
  95. [1]=>
  96. string(5) "three"
  97. }
  98. bool(true)
  99. closure with array
  100. array(1) {
  101. ["sum"]=>
  102. int(42)
  103. }
  104. array(1) {
  105. ["sum"]=>
  106. int(43)
  107. }
  108. array(1) {
  109. ["sum"]=>
  110. int(45)
  111. }
  112. bool(true)
  113. End result:int(42)
  114. closure with use
  115. array(1) {
  116. ["sum"]=>
  117. int(42)
  118. }
  119. array(1) {
  120. ["sum"]=>
  121. int(43)
  122. }
  123. array(1) {
  124. ["sum"]=>
  125. int(45)
  126. }
  127. bool(true)
  128. End result:int(48)
  129. closure with object
  130. object(stdClass)#1 (1) {
  131. ["sum"]=>
  132. int(42)
  133. }
  134. object(stdClass)#1 (1) {
  135. ["sum"]=>
  136. int(43)
  137. }
  138. object(stdClass)#1 (1) {
  139. ["sum"]=>
  140. int(45)
  141. }
  142. bool(true)
  143. End result:int(48)
  144. function with object
  145. object(stdClass)#2 (1) {
  146. ["sum"]=>
  147. int(42)
  148. }
  149. object(stdClass)#2 (1) {
  150. ["sum"]=>
  151. int(43)
  152. }
  153. object(stdClass)#2 (1) {
  154. ["sum"]=>
  155. int(45)
  156. }
  157. bool(true)
  158. End result:int(48)
  159. function with array
  160. array(1) {
  161. ["sum"]=>
  162. int(42)
  163. }
  164. array(1) {
  165. ["sum"]=>
  166. int(42)
  167. }
  168. array(1) {
  169. ["sum"]=>
  170. int(42)
  171. }
  172. bool(true)
  173. End result:int(42)
  174. closure and exception
  175. array(2) {
  176. [0]=>
  177. array(2) {
  178. ["function"]=>
  179. string(9) "{closure}"
  180. ["args"]=>
  181. array(2) {
  182. [0]=>
  183. int(2)
  184. [1]=>
  185. string(3) "two"
  186. }
  187. }
  188. [1]=>
  189. array(4) {
  190. ["file"]=>
  191. string(%d) "%s"
  192. ["line"]=>
  193. int(%d)
  194. ["function"]=>
  195. string(10) "array_walk"
  196. ["args"]=>
  197. array(2) {
  198. [0]=>
  199. &array(3) {
  200. ["one"]=>
  201. int(1)
  202. ["two"]=>
  203. int(2)
  204. ["three"]=>
  205. int(3)
  206. }
  207. [1]=>
  208. object(Closure)#2 (1) {
  209. ["parameter"]=>
  210. array(2) {
  211. ["$v"]=>
  212. string(10) "<required>"
  213. ["$k"]=>
  214. string(10) "<required>"
  215. }
  216. }
  217. }
  218. }
  219. }
  220. Done