Posted by & filed under 每日一题.

【四脚猫】每日一题(11月17日):在js中,如果知道一个匿名函数的名字,比方说函数名是test,那么可以直接输出这个函数体的定义代码,PHP 5.3以后也加入了匿名函数的功能,比如像这样一个函数定义:

1
2
3
$test = function () {
    echo 'hello world';
};

我能否在用类似echo $test模仿js中的方法,输出它的函数体呢?

参考答案:
以下是采用了PHP中反射的原理才读取源码中指定的代码,实现了类似js中的打印函数定义的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function closure_dump($closure) {
    try {
        $func = new ReflectionFunction($closure);
    } catch (ReflectionException $e) {
        echo $e->getMessage();
        return;
    }
    echo $func;
     $start = $func->getStartLine() - 1;

    $end =  $func->getEndLine() - 1;

  $filename = $func->getFileName();

//  echo implode("", array_slice(file($filename),$start, $end - $start + 1));
}

closure_dump($test);

欢迎各位攻城狮,各位大牛给每日一题投稿,大家可以把自己碰到的有趣问题,工作中碰到的难题等…发送到 稿件邮箱:2313427189@qq.com