在PHP中,您可以像这样命名函数:
function foo()
{
return "bar";
}
您可以使用如下所示的闭包:
$foo = function() {
return "bar";
};
闭包很棒而且易于创建,但是不幸的是我需要使用的库确实需要一个命名函数。是否可以从闭包动态创建命名函数?即不是提前在代码中定义所有函数,而是更像register_function($name, callable $closure)
。
我知道create_function
,但是那需要一个PHP字符串作为函数体,然后就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();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句