无法将递归函数转换为IIFE

问题描述 投票:0回答:1

我有一个包含像这样的递归函数的代码:

<?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);

[请注意,该代码仅是示例,仅出于说明目的。

我有一个包含像这样的递归函数的代码:

php recursion iife
1个回答
2
投票

我尚不清楚您要在这里实现什么,但是您可以使用global语句在函数中定义$recursive,从而使您想做的工作:

$arr = array();
($recursive = function (&$argument)
{
    global $recursive;

    if (count($argument) < 10)
    {
        $argument[] = 'foo';
        $recursive($argument);    // line 10
    }
})($arr);
print_r($arr);
© www.soinside.com 2019 - 2024. All rights reserved.