php打印可调用函数

时间:2014-08-26 13:18:30

标签: php callable

我正在尝试解决问题:

function f($callable_function){
   print_r($callable_function);// doesn't work at all, of course
}

f(function(){echo "hello World"});

我使用print_r函数获取Closure Object元素。有没有办法得到:

//OUTPUT RESULT
echo "hello World";

修改

这样做的目的是在String中获取函数声明(以后用于数据库)。任何开发人员都可以使用f函数,因此我的想法是尽可能简化,这意味着我不希望开发人员在String中声明他的函数。

2 个答案:

答案 0 :(得分:1)

从未关闭此问题,但自2014年以来我一直有答案:

 $reflFunc = new ReflectionFunction($callable);
 $filename = $reflFunc->getFileName()); 
 $startline = $reflFunc->getStartLine(); 
 $endline = $reflFunc->getEndLine();

然后使用preg_match提取需要的内容。 (如 第一个答案)

答案 1 :(得分:0)

您可以将PHP文件作为字符串获取,然后找到该函数(以下示例非常快,应该进行改进):

function f($callable_function) {
    $f = file_get_contents(__FILE__);
    preg_match("#function $callable_function\(.*\)[^\{]*{(.*)}#Us", $f, $matches);
    var_dump($matches);
}

function a() {
    echo "hello World";
}

f('a');

但是有一些限制:

  • 如果你有许多PHP文件,那么它可能会很复杂
  • 我的例子不支持将字符{添加到函数体中,但这可以通过擅长正则表达式的人来改进
  • 它不能使用匿名回调(也可能使用对象的方法)