closures_001.phpt 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. --TEST--
  2. Reflection on closures
  3. --FILE--
  4. <?php
  5. $closure = function($a, $b = 0) { };
  6. $ro = new ReflectionObject($closure);
  7. $rm = $ro->getMethod('__invoke');
  8. var_dump($rm->getNumberOfParameters());
  9. var_dump($rm->getNumberOfRequiredParameters());
  10. $rms = $ro->getMethods();
  11. foreach($rms as $rm) {
  12. if ($rm->getName() == '__invoke') {
  13. var_dump($rm->getNumberOfParameters());
  14. var_dump($rm->getNumberOfRequiredParameters());
  15. }
  16. }
  17. echo "---\n";
  18. $rm = new ReflectionMethod($closure, '__invoke');
  19. var_dump($rm->getName());
  20. var_dump($rm->getNumberOfParameters());
  21. var_dump($rm->getNumberOfRequiredParameters());
  22. echo "---\n";
  23. $rp = new ReflectionParameter(array($closure, '__invoke'), 0);
  24. var_dump($rp->isOptional());
  25. $rp = new ReflectionParameter(array($closure, '__invoke'), 1);
  26. var_dump($rp->isOptional());
  27. $rp = new ReflectionParameter(array($closure, '__invoke'), 'a');
  28. var_dump($rp->isOptional());
  29. $rp = new ReflectionParameter(array($closure, '__invoke'), 'b');
  30. var_dump($rp->isOptional());
  31. echo "---\n";
  32. $rp = new ReflectionParameter($closure, 0);
  33. var_dump($rp->isOptional());
  34. $rp = new ReflectionParameter($closure, 1);
  35. var_dump($rp->isOptional());
  36. $rp = new ReflectionParameter($closure, 'a');
  37. var_dump($rp->isOptional());
  38. $rp = new ReflectionParameter($closure, 'b');
  39. var_dump($rp->isOptional());
  40. ?>
  41. --EXPECT--
  42. int(2)
  43. int(1)
  44. int(2)
  45. int(1)
  46. ---
  47. string(8) "__invoke"
  48. int(2)
  49. int(1)
  50. ---
  51. bool(false)
  52. bool(true)
  53. bool(false)
  54. bool(true)
  55. ---
  56. bool(false)
  57. bool(true)
  58. bool(false)
  59. bool(true)