封闭似乎没有完全暴露于反射。在作为一个对象的检查时,它似乎没有任何用处:
$foo = function ($a, $b) {};
$ref = new ReflectionObject($foo);
var_dump($ref->getFileName()); // false
您可以获取匿名函数的参数:
$invoker = $ref->getMethod('__invoke');
var_dump($invoker->getParameters()); // "a" and "b"!
但不是它定义的地方:
var_dump($invoker->getFileName()); // false
有什么想法吗?
答案 0 :(得分:3)
我认为您要找的是ReflectionFunction
,而不是ReflectionObject
。
Here是参考。
它甚至包含一个isClosure
方法,并接受一个闭包作为构造函数参数。 : - )
示例:
$callback = function (){ echo 'hello'; };
$r = new ReflectionFunction($callback);
$startLine = $r->getStartLine();
$file = $r->getFileName();
$is_closure = $r->isClosure();