在递归调用中使用先前调用的参数而不作为参数发送 - PHP

时间:2017-01-05 11:19:14

标签: php recursion

在递归调用之后是否有任何方法可以使用方法的变量(不将其作为参数发送)。

例如:

class Doc {

    public function readDoc($file, $recursion = false) {
        if ($recursion != false) {
            // DO SOMETHING;
        }
        $filename = $file."Some added text";
        $this->readDoc($filename, 1);
    }
}

这里,是否可以使用第一次调用中发送的$file的值(递归调用readDoc()函数时)。

2 个答案:

答案 0 :(得分:1)

您可以使用数组创建一个简单的堆栈,例如

  class Doc {
    private $stack = [];

    public function readDoc($file, $recursion=false) {
          if($recursion != false)    
              DO SOMETHING

          $this->stack[] = $file;    
          $filename = $file."Some added text";
          $this->readDoc($filename, 1);
    }
}

然后将数组的第一个索引作为$ file变量。

答案 1 :(得分:0)

你也可以使用匿名函数在不同的范围内工作:

public function test($file, $recursion = false)
{
    $rec = function($r) use ($file, &$rec)
    {
        if($r !== false) {

        }

        $filename = $file.'test';
        return $rec($r);
    };

    return $rec($recursion);
}

在这种情况下,$ file变量始终保持不变 (请注意,上面的示例创建了一个无限循环)