【发布时间】:2014-03-10 18:29:46
【问题描述】:
假设我有一个这样的匿名 PHP 函数:
<?php
$l = function() { echo "hello world"; };
是否可以获得匿名函数$l的字符串表示,即包含函数体的字符串?
我尝试了一些方法:
-
echo $l;PHP Catchable 致命错误:类 Closure 的对象无法转换为字符串 -
var_dump($l);class Closure#1 (0) { } -
echo $l->__toString();: 调用未定义的方法 Closure::__toString() -
get_class_methods($l)返回array('bind', 'bindTo'),所以似乎不存在未记录的方法 -
$r = new ReflectionClass($l);:getProperties()、getConstants() 和 getStaticProperties() 都是空的,$r->__toString()也没有返回任何有用的东西。
我的代码中并不需要这个,我只是认为如果出现问题,它可能对日志记录有用。在我自己无法提出解决方案之后,我很好奇这是否可能。
【问题讨论】:
-
你怎么看
create_function(),这样你就可以将函数内容作为字符串,只需要通过这个函数给它命名吗? -
@Javad 这是个好主意。但是,我想将匿名函数作为方法参数传递。当然,我可以简单地传递一个字符串和方法的参数并使用
create_function(),但是只会在运行时检查语法,这与匿名函数的想法相矛盾。 -
是的,你是对的,但是如果你查看
create_function()的手册,你可以通过这个[ca1.php.net/create_function](查看第一个示例)创建一个匿名函数 -
没有。闭包像任何其他代码一样在运行时编译。解决这个问题的唯一方法是将函数体存储为字符串并使用@Javad 已经声明的
create_function()。
标签: php closures anonymous-function