如何在 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
编辑:对于重复的问题,我深表歉意,但是搜索这个问题的标题并没有在搜索结果中显示这样的重复,所以我已经不知道有问题了。
这是行不通的,因为 $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