获取匿名函数的字符串表示形式

时间:2014-03-10 18:29:47

标签: php closures anonymous-function

假设我有一个像这样的匿名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()也没有返回任何有用的内容。

我的代码中并不需要这个,我只是认为如果出现问题,它可能对日志记录有用。在我无法自己提出解决方案后,我很好奇是否有可能。

2 个答案:

答案 0 :(得分:4)

您唯一的“真实”选项是使用实际的PHP parser来解析匿名函数。

不要认为the same trap as @argon did基于DocumentDB的简单脚本实际上可以解析PHP代码。它太脆弱了,并且会以光荣的方式为最简单的例子打破。

以防万一:

substr_count
  

致命错误:未捕获异常:

中的上下文过于复杂

https://3v4l.org/CEmqV

答案 1 :(得分:1)

它是访问匿名文件源代码的矛盾。如果需要引用源,则不要创建匿名函数:

$myfunction='echo "hello world";';
$l = create_function($myfunction);
print highlight_string($myfunction) . " results in....<br />";
$l();

(提示,您可能需要查看func_get_args()