如果您尝试递归使用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. */