【发布时间】:2016-08-19 15:11:45
【问题描述】:
在 PHP 中,你可以有这样的命名函数:
function foo()
{
return "bar";
}
你可以有这样的闭包:
$foo = function() {
return "bar";
};
闭包很棒且易于创建,但不幸的是,我需要使用的库确实需要一个命名函数。是否可以从闭包动态创建命名函数? IE。没有提前在代码中定义所有函数,而更像是register_function($name, callable $closure)。
我知道create_function,但它采用 PHP 字符串作为函数体,只是 evals,这不是我想要的。
【问题讨论】:
-
你是什么意思,“想要一个命名函数”?你必须做
library_function('my_func'),然后它做function library_function($func) { $func(); }? -
@MarcB:我希望它做到了。不,库是 Smarty,用例是注册插件。它会根据你给它的可调用类型来对你的模板进行特定的编译,并且目前不支持闭包。它可以是实例方法、静态方法或命名函数。
-
那么 smarty 想要一个命名函数但你不想命名它?
-
我不能,因为它们确实是运行时定义的闭包。将其视为
foreach ($things as $thing) { $closure = getClosureForThing($thing); registerClosure($closure); }。无论如何,对于问题的范围来说,确切的用途有点太多了。我只是想知道这是否可能。如果没有,我将不得不等到相关问题得到解决。
标签: php