1

闭包似乎并没有完全暴露在反射中。在作为一个对象进行检查时,它似乎没有任何用处:

$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

有任何想法吗?

4

1 回答 1

3

我认为您正在寻找的是ReflectionFunction而不是ReflectionObject.

是参考。它甚至包括一个isClosure方法,并接受一个闭包作为构造函数参数。:-)

例子:

$callback = function (){ echo 'hello'; };
$r = new ReflectionFunction($callback);
$startLine = $r->getStartLine();
$file = $r->getFileName();
$is_closure = $r->isClosure();
于 2013-04-10T16:41:49.317 回答