PHP –在匿名函数/闭包中进行递归

如果您尝试递归使用PHP匿名函数而遇到麻烦,则可能会看到类似以下的错误

Notice: Undefined variable: fooFunction in /yourScript.php on line 10

此错误可能是由[至少]两个问题之一引起的:

不使用功能变量

看一下脚本中抛出“未定义变量”错误的行。如果在那行进行递归调用,那么这就是您的问题。

您需要做的是在函数声明中使用use关键字,并提及函数变量本身。看一下#2和下面的示例,看看如何正确执行此操作。

无法通过引用传递函数变量

如果脚本中的“未定义变量”错误被抛出到函数声明行上,而您正在使用use关键字,则可能是您的问题。

您需要做的是在函数名称前的使用括号中添加“&”符号,以通过引用传递函数。如果无法通过引用传递,则在声明函数之前,函数变量将采用其值(最有可能为NULL)。


看一下下面的脚本。查找use关键字和'&'符号。

$killTheCat = function($lives = 9) use (&$killTheCat) {

$lives--;

echo 'Running, ';

if ($lives > 0) {

echo 'lives = '.$lives.'!'.PHP_EOL;

$killTheCat($lives);

} elseif ($lives <= 0) {

echo 'lives == 0 and the cat is dead.'.PHP_EOL;

}

};

$killTheCat();

/**

* Running, lives = 8!

* Running, lives = 7!

* Running, lives = 6!

* Running, lives = 5!

* Running, lives = 4!

* Running, lives = 3!

* Running, lives = 2!

* Running, lives = 1!

* Running, lives == 0 and the cat is dead.

*/

以上是 PHP –在匿名函数/闭包中进行递归 的全部内容, 来源链接: utcz.com/z/356542.html

回到顶部