【问题标题】:Can I find where a PHP anonymous function was defined?我可以找到 PHP 匿名函数的定义位置吗?
【发布时间】:2013-04-02 15:06:00
【问题描述】:

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

$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

有什么想法吗?

【问题讨论】:

    标签: php reflection closures anonymous-function


    【解决方案1】:

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

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

    例子:

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

    【讨论】:

    • 谢谢。我只阅读了部分文档并假设“name”参数需要一个字符串。
    • (对于未来的访问者)我更新了我的答案,指出它可以关闭 __construct() 参数。
    猜你喜欢
    • 1970-01-01
    • 2018-04-17
    • 2023-03-25
    • 1970-01-01
    • 2012-02-24
    • 2015-12-03
    • 2011-05-05
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多