我有一个包含像这样的递归函数的代码:
<?php
$arr = [];
function recursive(&$argument)
{
if (count($argument) < 10)
{
$argument[] = 'foo';
recursive($argument);
}
}
recursive($arr);
print_r($arr);
?>
很好。但是在将递归函数转换为IIFE(立即调用函数表达式)后,错误开始出现:
$recursive = (function (&$argument)
{
if (count($argument) < 10)
{
$argument[] = 'foo';
$recursive($argument); // line 10
}
})($arr);
错误是:
Notice:未定义的变量:在第10行的php_file_path中递归]
致命错误
:未捕获的错误:函数名称必须为php_file_path:10中的字符串堆栈跟踪:
#0 php_file_path
(12):{closure}(Array)#1 {main}
第10行的php_file_path
中抛出我以为该函数可能需要引用自身的变量,因此我像以下内容一样添加了关键字
use
。但是结果的错误没有区别,除了未定义变量的提示现在指向第5行。
$recursive = (function (&$argument) use ($recursive) // line 5 { if (count($argument) < 10) { $argument[] = 'foo'; $recursive($argument); } })($arr);
[请注意,该代码仅是示例,仅出于说明目的。
我有一个包含像这样的递归函数的代码:
我尚不清楚您要在这里实现什么,但是您可以使用global
语句在函数中定义$recursive
,从而使您想做的工作:
$arr = array();
($recursive = function (&$argument)
{
global $recursive;
if (count($argument) < 10)
{
$argument[] = 'foo';
$recursive($argument); // line 10
}
})($arr);
print_r($arr);