如何在 PHP 中构建匿名递归函数?

How to build an anonymous recursive function in PHP?

编辑:对于重复的问题,我深表歉意,但是搜索这个问题的标题并没有在搜索结果中显示这样的重复,所以我已经不知道有问题了。


这是行不通的,因为 $greet 不知道它何时会被调用。

<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
    if($name != 'PHP')
    {
        $greet('PHP'); // $greet not defined
    }
};

$greet('World');
?>

我们的想法是拥有一个纯粹在其 parent 范围内的递归函数(即函数中的函数),而不需要构建 class.

那么,如何在 PHP 中正确构建匿名递归函数?有可能吗?如果是,怎么做?

是的,你可以。您需要通过引用 use $greet 变量,如下所示:

$greet = function($name) use (&$greet)
{
    printf("Hello %s\r\n", $name);
    if($name != 'PHP')
    {
        $greet('PHP');
    }
};

$greet('World');

工作示例:
https://3v4l.org/vUhIW

这篇文章对此进行了更多描述:
https://fragdev.com/blog/php-recursion-with-anonymous-functions