假设我有一个像这样的匿名PHP函数:
<?php
$l = function() { echo "hello world"; };
是否可以获取匿名函数$l
的字符串表示形式,即包含函数体的字符串?
我尝试了一些事情:
echo $l;
PHP Catchable致命错误:类Closure的对象无法转换为字符串var_dump($l);
课程关闭#1(0){} echo $l->__toString();
:调用未定义的方法Closure :: __ toString()get_class_methods($l)
返回array('bind', 'bindTo')
,因此似乎没有未记录的方法$r = new ReflectionClass($l);
:getProperties(),getConstants()和getStaticProperties()都是空的,$r->__toString()
也没有返回任何有用的内容。我的代码中并不需要这个,我只是认为如果出现问题,它可能对日志记录有用。在我无法自己提出解决方案后,我很好奇是否有可能。
答案 0 :(得分:4)
您唯一的“真实”选项是使用实际的PHP parser来解析匿名函数。
不要认为the same trap as @argon did基于DocumentDB
的简单脚本实际上可以解析PHP代码。它太脆弱了,并且会以光荣的方式为最简单的例子打破。
以防万一:
substr_count
致命错误:未捕获异常:
中的上下文过于复杂
答案 1 :(得分:1)
它是访问匿名文件源代码的矛盾。如果需要引用源,则不要创建匿名函数:
$myfunction='echo "hello world";';
$l = create_function($myfunction);
print highlight_string($myfunction) . " results in....<br />";
$l();
(提示,您可能需要查看func_get_args())