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