在PHP中,您可以使用以下命名函数:
function foo()
{
return "bar";
}
Run Code Online (Sandbox Code Playgroud)
你可以有这样的闭包:
$foo = function() {
return "bar";
};
Run Code Online (Sandbox Code Playgroud)
闭包非常棒且易于创建,但遗憾的是我需要使用的库真的需要一个命名函数.是否可以动态地从闭包创建命名函数?即不提前在代码中定义所有函数,但更像是register_function($name, callable $closure).
我知道create_function,但是那个将PHP字符串作为函数体并且只是eval它,这不是我正在寻找的.
您可以使用回调创建全局数组.添加到此全局数组register_func($name, $callback)并通过调用函数call_func($name, $parameter1, $parameter2, ...).
没有使用eval我认为这不可能从回调创建命名函数.
我不认为是否可以动态地从闭包中创建命名函数,但使用__call()类的魔术方法,您可能会发现此解决方法很有帮助:
<?php
class Foo
{
public function __call($name, $args)
{
if (isset($this->{$name}))
return call_user_func_array($this->{$name}, $args);
}
}
$foo = new Foo();
// Declaring a closure then assign it to $bar property of Foo
$foo->bar = function () {
echo "bar";
};
// Call Foo method of the same name
$foo->bar();
Run Code Online (Sandbox Code Playgroud)