问题描述
编辑:我很抱歉重复,但搜索此问题的标题并没有在搜索结果中显示这样的重复,所以我不知道已经有问题了。
这行不通,因为 $greet
在调用时是未知的。
<?PHP
$greet = function($name)
{
printf("Hello %s\r\n",$name);
if($name != 'PHP')
{
$greet('PHP'); // $greet not defined
}
};
$greet('World');
?>
这个想法是拥有一个纯粹在其父作用域内的递归函数(即函数中的函数),而不需要构建一个类。
那么,如何在 PHP 中正确构建匿名递归函数?甚至有可能吗?如果是这样,如何?
解决方法
是的,你可以。您需要通过引用 use
$greet
变量,如下所示:
$greet = function($name) use (&$greet)
{
printf("Hello %s\r\n",$name);
if($name != 'PHP')
{
$greet('PHP');
}
};
$greet('World');
这篇文章更详细地描述了这一点:
https://fragdev.com/blog/php-recursion-with-anonymous-functions