2013-04-10 98 views
1

关闭似乎没有完全暴露于反思。在检查作为一个对象,它似乎并不具有任何有用的东西:我可以找到PHP匿名函数的定义位置吗?

$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 

有没有想法?

回答

3

我认为你要找的是ReflectionFunction而不是ReflectionObject

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

实施例:

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

感谢。我只部分阅读了文档,并假定“name”参数需要一个字符串。 – 2013-04-10 16:44:14

+0

(针对未来的访问者)我更新了我的回答,以表明它可以对'__construct()'参数进行闭包。 – 2013-04-10 16:50:23

相关问题