我正在尝试解决问题:
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中声明他的函数。
答案 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');
但是有一些限制:
{
添加到函数体中,但这可以通过擅长正则表达式的人来改进