我可以找到定义PHP匿名函数的位置吗?

时间:2013-04-10 16:34:25

标签: php reflection closures anonymous-function

封闭似乎没有完全暴露于反射。在作为一个对象的检查时,它似乎没有任何用处:

$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

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我认为您要找的是ReflectionFunction,而不是ReflectionObject

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

示例:

$callback = function (){ echo 'hello'; };
$r = new ReflectionFunction($callback);
$startLine = $r->getStartLine();
$file = $r->getFileName();
$is_closure = $r->isClosure();